[narray-miss] 01/02: Imported Upstream version 1.3.0

Youhei SASAKI uwabami-guest at moszumanska.debian.org
Thu Jul 21 04:52:07 UTC 2016


This is an automated email from the git hooks/post-receive script.

uwabami-guest pushed a commit to branch upstream
in repository narray-miss.

commit a582b7724f42c7926243f94c9a4aa6294c650869
Author: Youhei SASAKI <uwabami at gfd-dennou.org>
Date:   Tue Mar 1 18:20:00 2016 +0900

    Imported Upstream version 1.3.0
---
 LICENSE.txt                    |   2 +-
 README.rdoc                    |   4 +-
 lib/narray_miss/narray_miss.rb | 153 ++++++++++++++++++++++++-----------------
 lib/narray_miss/version.rb     |   2 +-
 metadata.yml                   |  24 +++----
 narray_miss.gemspec            |  18 +++--
 test/test_narray_miss.rb       |   1 +
 7 files changed, 121 insertions(+), 83 deletions(-)

diff --git a/LICENSE.txt b/LICENSE.txt
index fc237ef..0a8b77e 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,7 +1,7 @@
 NArrayMiss is copyrighted free software by Seiya Nishizawa and GFD
 Dennou Club (http://www.gfd-dennou.org/).
 
-Copyright 2001-2012 (C) Seiya Nishizawa and GFD Dennou Club
+Copyright 2001-2016 (C) Seiya Nishizawa and GFD Dennou Club
 (http://www.gfd-dennou.org/) All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/README.rdoc b/README.rdoc
index 2b4a252..54c8d69 100644
--- a/README.rdoc
+++ b/README.rdoc
@@ -13,7 +13,9 @@ The URL of the NArrayMiss home-page is:
 = Requires
 
 * Ruby (http://www.ruby-lang.org/)
-* NArray (http://narray.rubyforge.org/index.html.en)
+* NumRu-NArray or NArray
+  * NumRu-NArray: https://github.com/seiya/numru-narray/
+  * NArray: http://narray.rubyforge.org/index.html.en
 
 
 = Install
diff --git a/lib/narray_miss/narray_miss.rb b/lib/narray_miss/narray_miss.rb
index c7138df..0071431 100644
--- a/lib/narray_miss/narray_miss.rb
+++ b/lib/narray_miss/narray_miss.rb
@@ -34,7 +34,19 @@ To use NArrayMiss class, you need invoking "require 'narray_miss.rb'" in your sc
 
 =end
 
-require 'narray'
+begin
+  require 'numru/narray'
+  NARRAY = NumRu::NArray
+rescue LoadError
+  err = $!
+  begin
+    require 'narray'
+    NARRAY = NArray
+  rescue LoadError
+    STDERR.puts "You should install numru-narray or narray"
+    raise err
+  end
+end
 
 
 class NArrayMiss
@@ -45,7 +57,7 @@ class NArrayMiss
      type code for 1 byte unsigned integer.
 --- NArrayMiss::SINT
      type code for 2 byte signed integer.
---- NArrayMiss::INT
+--- NArrayMiss::LINT
      type code for 4 byte signed integer.
 --- NArrayMiss::SFLOAT
      type code for single precision float.
@@ -61,14 +73,23 @@ class NArrayMiss
 go back to ((<Index>))
 =end
 
-  BYTE = NArray::BYTE
-  SINT = NArray::SINT
-  INT = NArray::INT
-  SFLOAT = NArray::SFLOAT
-  FLOAT = NArray::FLOAT
-  SCOMPLEX = NArray::SCOMPLEX
-  COMPLEX = NArray::COMPLEX
-  OBJECT = NArray::OBJECT
+  BYTE = NARRAY::BYTE
+  SINT = NARRAY::SINT
+  INT = NARRAY::INT
+  LINT = NARRAY::LINT
+  if NARRAY.const_defined?(:LLINT)
+    LLINT = NARRAY::LINT
+    MINT = LLINT # int for mask operations
+    @@llint = true
+  else
+    MINT = LINT # int for mask operations
+    @@llint = false
+  end
+  SFLOAT = NARRAY::SFLOAT
+  FLOAT = NARRAY::FLOAT
+  SCOMPLEX = NARRAY::SCOMPLEX
+  COMPLEX = NARRAY::COMPLEX
+  OBJECT = NARRAY::OBJECT
 
   class << self
     alias :__new__ :new
@@ -94,7 +115,7 @@ go back to ((<Index>))
 --- NArrayMiss.sint(size, ...)
      same as NArrayMiss.new(NArrayMiss::SINT, ((|size|)), ...).
 --- NArrayMiss.int(size, ...)
-     same as NArrayMiss.new(NArrayMiss::INT, ((|size|)), ...).
+     same as NArrayMiss.new(NArrayMiss::LINT, ((|size|)), ...).
 --- NArrayMiss.sfloat(size, ...)
      same as NArrayMiss.new(NArrayMiss::SFLOAT, ((|size|)), ...).
 --- NArrayMiss.float(size, ...)
@@ -117,8 +138,8 @@ go back to ((<Index>))
 =end
 
   def self.new(*arg)
-    array = NArray.new(*arg)
-    mask = NArray.byte(*arg[1..-1])
+    array = NARRAY.new(*arg)
+    mask = NARRAY.byte(*arg[1..-1])
     __new__(array, mask)
   end
   def self.byte(*arg)
@@ -130,6 +151,14 @@ go back to ((<Index>))
   def self.int(*arg)
     NArrayMiss.new(INT,*arg)
   end
+  def self.lint(*arg)
+    NArrayMiss.new(LINT,*arg)
+  end
+  if @@llint
+    def self.llint(*arg)
+      NArrayMiss.new(LLINT,*arg)
+    end
+  end
   def self.sfloat(*arg)
     NArrayMiss.new(SFLOAT,*arg)
   end
@@ -146,7 +175,7 @@ go back to ((<Index>))
     NArrayMiss.new(OBJECT,*arg)
   end
   def self.[](*arg)
-    NArrayMiss.to_nam(NArray[*arg])
+    NArrayMiss.to_nam(NARRAY[*arg])
   end
   def self.to_nam_no_dup(*arg)
     if arg.length > 2 || arg.length==0 then
@@ -154,9 +183,9 @@ go back to ((<Index>))
     end
 
     array = arg[0]
-    if Numeric===array then array = NArray[array] end
-    if Array===array then array = NArray.to_na(array) end
-    if !array.is_a?(NArray) then
+    if Numeric===array then array = NARRAY[array] end
+    if Array===array then array = NARRAY.to_na(array) end
+    if !array.is_a?(NARRAY) then
       raise("argument must be Numeric, NArray or Array")
     end
 
@@ -164,27 +193,27 @@ go back to ((<Index>))
       mask = arg[1]
       if Numeric===mask then mask = array.ne(mask) end
       if Array===mask then
-	mask = NArray.to_na(mask).ne(0)
+	mask = NARRAY.to_na(mask).ne(0)
       end
       if mask.class == FalseClass then
-	mask = NArray.byte(*array.shape)
+	mask = NARRAY.byte(*array.shape)
       end
       if mask.class == TrueClass then
-	mask = NArray.byte(*array.shape).fill(1)
+	mask = NARRAY.byte(*array.shape).fill(1)
       end
-      if !(NArray===mask && mask.typecode==BYTE) then
+      if !(NARRAY===mask && mask.typecode==BYTE) then
 	  raise("mask must be Numeric, Array, true, false or NArray(byte)")
       end
       if mask.length!=array.length
         raise "mask.length must be same as array.length"
       end
     else
-      mask = NArray.byte(*array.shape).fill(1)
+      mask = NARRAY.byte(*array.shape).fill(1)
     end
     __new__(array,mask)
   end
   def self.to_nam(*arg)
-    if !(Numeric===arg[0]) && !(Array===arg[0]) && !arg[0].is_a?(NArray)
+    if !(Numeric===arg[0]) && !(Array===arg[0]) && !arg[0].is_a?(NARRAY)
       raise "first argument must be Numeric, NArray or Array"
     end
     arg[0] = arg[0].dup if !(Numeric===arg[0])
@@ -551,7 +580,7 @@ go back to ((<Index>))
       array = @array.dup
       array[@mask.not] = 0
       return NArrayMiss.to_nam_no_dup(array.accum(*arg),
-			       @mask.to_type(NArray::INT).accum(*arg).ne(0))
+			       @mask.to_type(MINT).accum(*arg).ne(0))
     end
   end
 
@@ -588,7 +617,7 @@ go back to ((<Index>))
   def mean(*dims)
     min_count = NArrayMiss.check_options(dims, 1)
     # 整数型の場合は浮動小数型へ変換
-    ary0 = self.integer? ? self.to_type(NArray::DFLOAT) : self
+    ary0 = self.integer? ? self.to_type(NARRAY::DFLOAT) : self
     NArrayMiss.reduction(@mask, rank, min_count, dims, true, typecode) do |count_sum, count_accum|
       ary0.sum(*dims)/count_sum
     end
@@ -596,7 +625,7 @@ go back to ((<Index>))
   def stddev(*dims)
     min_count = NArrayMiss.check_options(dims, 2)
     # 整数型の場合は浮動小数型へ変換
-    ary0 = self.integer? ? self.to_type(NArray::DFLOAT) : self
+    ary0 = self.integer? ? self.to_type(NARRAY::DFLOAT) : self
     NArrayMiss.reduction(@mask, rank, min_count, dims, true, typecode) do |count_sum, count_accum|
       ary0 = ary0 - ary0.accum(*dims)/count_accum
       ary0 = ary0.abs if ary0.complex?
@@ -607,7 +636,7 @@ go back to ((<Index>))
   def rms(*dims)
     min_count = NArrayMiss.check_options(dims, 1)
     # 整数型の場合は浮動小数型へ変換
-    ary0 = self.integer? ? self.to_type(NArray::DFLOAT) : self
+    ary0 = self.integer? ? self.to_type(NARRAY::DFLOAT) : self
     NArrayMiss.reduction(@mask, rank, min_count, dims, true, typecode) do |count_sum, count_accum|
       ary0 = ary0.abs if ary0.complex?
       ary0 = (ary0**2).sum(*dims) / count_sum
@@ -617,7 +646,7 @@ go back to ((<Index>))
   def rmsdev(*dims)
     min_count = NArrayMiss.check_options(dims, 1)
     # 整数型の場合は浮動小数型へ変換
-    ary0 = self.integer? ? self.to_type(NArray::DFLOAT) : self
+    ary0 = self.integer? ? self.to_type(NARRAY::DFLOAT) : self
     NArrayMiss.reduction(@mask, rank, min_count, dims, true, typecode) do |count_sum, count_accum|
       ary0 = ary0 - ary0.accum(*dims)/count_accum
       ary0 = ary0.abs if ary0.complex?
@@ -630,17 +659,17 @@ go back to ((<Index>))
     if arg.length==0 then
       return @array[@mask].median
     else
-      nshape = NArray.to_na(@array.shape)
+      nshape = NARRAY.to_na(@array.shape)
       nshape[arg]=1
       nslice = nshape[nshape.ne(1).where]
-      index = NArray.object(@mask.rank)
+      index = NARRAY.object(@mask.rank)
       index[nshape.eq(1).where] = true
       obj = NArrayMiss.new(@array.typecode,*nslice.to_a)
       total = 1
       nslice.each{|n| total *= n}
       for i in 0...total
         index[nshape.ne(1).where] = pos(i,nslice)
-        mask = NArray.byte(*@array.shape).fill(0)
+        mask = NARRAY.byte(*@array.shape).fill(0)
         mask[*index] = 1
         mask = @mask&mask
         if mask.count_true != 0 then
@@ -668,17 +697,17 @@ go back to ((<Index>))
 	obj[@mask] = @array[@mask].#{operator}
         return obj
       else
-        nshape = NArray.to_na(@array.shape)
+        nshape = NARRAY.to_na(@array.shape)
         nshape[arg]=1
         nslice = nshape[nshape.ne(1).where]
-        index = NArray.object(@mask.rank)
+        index = NARRAY.object(@mask.rank)
         index[nshape.eq(1).where] = true
         obj = NArrayMiss.new(@array.typecode,*@array.shape)
         total = 1
         nslice.each{|n| total *= n}
         for i in 0...total
           index[nshape.ne(1).where] = pos(i,nslice)
-          mask = NArray.byte(*@array.shape).fill(0)
+          mask = NARRAY.byte(*@array.shape).fill(0)
           mask[*index] = 1
           mask = @mask&mask
           if mask.count_true != 0 then
@@ -807,7 +836,7 @@ go back to ((<Index>))
       self.set_missing_value!(arg[0])
       return @array
     else
-      raise(ArgumentError, "Usage: NArray#to_na([missing_value])")
+      raise(ArgumentError, "Usage: NArrayMiss#to_na([missing_value])")
     end
   end
   def to_na(*arg)
@@ -1048,14 +1077,14 @@ go back to ((<Index>))
   end
   def set_mask(mask)
     if mask.class == Array then
-      tmp = NArray.byte(*@mask.shape)
+      tmp = NARRAY.byte(*@mask.shape)
       tmp[true] = mask
       mask = tmp
     end
     if mask.class == NArrayMiss then
       mask = mask.to_na(0)
     end
-    if mask.class == NArray then
+    if mask.class == NARRAY then
       if mask.typecode != BYTE then
 	raise("mask must be NArrayMiss.byte, NArray.byte or Array")
       end
@@ -1124,15 +1153,15 @@ go back to ((<Index>))
     if arg.length==0 then
       return @mask.count_true
     else
-      return @mask.to_type(NArray::INT).sum(*arg)
+      return @mask.to_type(MINT).sum(*arg)
     end    
   end
   def count_invalid(*arg)
     if arg.length==0 then
       return @mask.count_false
     else
-      return NArray.int(*@mask.shape).fill(1).sum(*arg)-
-	     @mask.to_type(NArray::INT).sum(*arg)
+      return NARRAY.int(*@mask.shape).fill(1).sum(*arg)-
+	     @mask.to_type(MINT).sum(*arg)
     end
   end
 
@@ -1172,8 +1201,8 @@ go back to ((<Index>))
 
   def coerce(x)
     if Numeric===x then
-      return [NArrayMiss.new(NArray[x].typecode,*self.shape).fill(x),self]
-    elsif x.class==Array || x.class==NArray then
+      return [NArrayMiss.new(NARRAY[x].typecode,*self.shape).fill(x),self]
+    elsif x.class==Array || x.class==NARRAY then
       return [NArrayMiss.to_nam(x), self]
     else
       raise("donnot know how to cange #{x.class} to NArrayMiss")
@@ -1188,7 +1217,7 @@ go back to ((<Index>))
     max_col = 80
     sep = ", "
     const = Hash.new
-    NArray.constants.each{|c| const[NArray.const_get(c)] = c}
+    NARRAY.constants.each{|c| const[NARRAY.const_get(c)] = c}
     str_ret = "NArrayMiss."+const[typecode].to_s.downcase+"("+shape.join(",")+"):"
     if rank == 0 then
       str_ret << " []"
@@ -1250,8 +1279,8 @@ go back to ((<Index>))
   end
   def self._load(o)
     ary, mask = Marshal::load(o)
-    ary = NArray._load(ary)
-    mask = NArray._load(mask)
+    ary = NARRAY._load(ary)
+    mask = NARRAY._load(mask)
     NArrayMiss.to_nam_no_dup(ary,mask)
   end
 
@@ -1262,7 +1291,7 @@ go back to ((<Index>))
   private
   def pos(n,shape)
     rank = shape.length
-    result = NArray.int(rank)
+    result = NARRAY.int(rank)
     m=n
     for i in 0..rank-2
       j = rank-1-i
@@ -1281,11 +1310,11 @@ go back to ((<Index>))
       term1 = @array
       term2 = arg
       mask = @mask
-    when Array, NArray
+    when Array, NARRAY
       term1 = @array.dup
       term1[@mask.not] = dummy # 欠損部分に dummy を代入
-      term2 = arg.kind_of?(NArray) ? arg : NArray.to_na(arg) # Array -> NArray
-      mask = NArray.byte(*term2.shape).fill(1) # 2項目は欠損無し
+      term2 = arg.kind_of?(NARRAY) ? arg : NARRAY.to_na(arg) # Array -> NArray
+      mask = NARRAY.byte(*term2.shape).fill(1) # 2項目は欠損無し
       mask = @mask & mask
     when NArrayMiss
       term1 = @array.dup
@@ -1307,13 +1336,13 @@ go back to ((<Index>))
 
   def self.reduction(mask, rank, min_count, dims, flag, typecode)
     # flag: リダクションを行う次元方向の有効な値の個数で、割り算を行うかどうかのフラグ
-    count_sum = mask.to_type(NArray::LINT).sum(*dims)
+    count_sum = mask.to_type(MINT).sum(*dims)
     # 返り値が配列か、スカラーかによって分岐
-    if count_sum.kind_of?(NArray)
+    if count_sum.kind_of?(NARRAY)
       mask = count_sum.ge(min_count)
       # すべての要素が欠損値にならないかチェック
       if mask.any?
-        count_accum = NArray.ref(count_sum)
+        count_accum = NARRAY.ref(count_sum)
         dims.collect{|d|d<0 ? d+rank : d}.sort.each do |d|
           count_accum.newdim!(d)
         end
@@ -1326,13 +1355,13 @@ go back to ((<Index>))
         ary = NArrayMiss.to_nam_no_dup(ary, mask) unless flag
       else
         # すべての要素が欠損値の NArrayMiss を返す
-        na = NArray.new(typecode, *mask.shape)
+        na = NARRAY.new(typecode, *mask.shape)
         ary = NArrayMiss.to_nam_no_dup(na, false)
       end
     else
       # 有効な要素数があるかチェック
       if count_sum >= min_count
-        count_accum = NArray.int(*([1]*mask.rank)).fill!(count_sum)
+        count_accum = NARRAY.int(*([1]*mask.rank)).fill!(count_sum)
         ary = yield(count_sum, count_accum)
       else
         # 有効な要素数が足りない場合は nil を返す
@@ -1383,7 +1412,7 @@ module NMMath
     eval <<-EOL,nil,__FILE__,__LINE__+1
     def #{operator}(x)
       case x
-      when Numeric, Array, NArray
+      when Numeric, Array, NARRAY
 	NMath::#{operator}(x)
       when NArrayMiss
 	obj = NArrayMiss.new(x.typecode,*x.shape)
@@ -1405,7 +1434,7 @@ module NMMath
     def #{operator}(x,y)
       obj = nil
       case x
-      when Numeric, Array, NArray
+      when Numeric, Array, NARRAY
 	mask1 = nil
       when NArrayMiss
 	obj = NArrayMiss.new(x.typecode,*x.shape)
@@ -1414,7 +1443,7 @@ module NMMath
         raise ArgumentError, "argument is invalid class"
       end
       case y
-      when Numeric, Array, NArray
+      when Numeric, Array, NARRAY
 	mask2 = nil
       when NArrayMiss
 	obj ||= NArrayMiss.new(y.typecode,*y.shape)
@@ -1460,7 +1489,7 @@ module NMMath
       def #{name}(ary0,ary1,*dims)
         min_count = NArrayMiss.check_options(dims, 2)
         case ary0
-        when Numeric, Array, NArray
+        when Numeric, Array, NARRAY
           mask0 = nil
         when NArrayMiss
           mask0 = ary0.get_mask!
@@ -1468,7 +1497,7 @@ module NMMath
           raise ArgumentError, "argument is invalid class"
         end
         case ary1
-        when Numeric, Array, NArray
+        when Numeric, Array, NARRAY
           mask1 = nil
         when NArrayMiss
           mask1 = ary1.get_mask!
@@ -1489,12 +1518,12 @@ module NMMath
         if ary1.shape != ary1.shape
           raise "shape is different"
         end
-        ary0 = ary0.to_type(NArray::DFLOAT)
-        ary1 = ary1.to_type(NArray::DFLOAT)
+        ary0 = ary0.to_type(NARRAY::DFLOAT)
+        ary1 = ary1.to_type(NARRAY::DFLOAT)
         mask = mask0.nil? ? mask1 : mask1.nil? ? mask0 : mask0&mask1
         ary0.set_mask(mask)
         ary1.set_mask(mask)
-        NArrayMiss.reduction(mask, ary0.rank, min_count, dims, true, NArray::DFLOAT) do |count_sum, count_accum|
+        NArrayMiss.reduction(mask, ary0.rank, min_count, dims, true, NARRAY::DFLOAT) do |count_sum, count_accum|
           #{hash[:post]}
         end
       end
diff --git a/lib/narray_miss/version.rb b/lib/narray_miss/version.rb
index 888c8fe..b9eca9b 100644
--- a/lib/narray_miss/version.rb
+++ b/lib/narray_miss/version.rb
@@ -1,3 +1,3 @@
 class NArrayMiss
-  VERSION = "1.2.8"
+  VERSION = "1.3.0"
 end
diff --git a/metadata.yml b/metadata.yml
index 0f32349..d94c8e6 100644
--- a/metadata.yml
+++ b/metadata.yml
@@ -1,30 +1,27 @@
 --- !ruby/object:Gem::Specification
 name: narray_miss
 version: !ruby/object:Gem::Version
-  version: 1.2.8
-  prerelease: 
+  version: 1.3.0
 platform: ruby
 authors:
 - Seiya Nishizawa
 autorequire: 
 bindir: bin
 cert_chain: []
-date: 2012-07-09 00:00:00.000000000 Z
+date: 2016-02-15 00:00:00.000000000 Z
 dependencies:
 - !ruby/object:Gem::Dependency
-  name: narray
+  name: numru-narray
   requirement: !ruby/object:Gem::Requirement
-    none: false
     requirements:
-    - - ! '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
   type: :runtime
   prerelease: false
   version_requirements: !ruby/object:Gem::Requirement
-    none: false
     requirements:
-    - - ! '>='
+    - - ">="
       - !ruby/object:Gem::Version
         version: '0'
 description: NArrayMiss is an additional class with processing of missing value to
@@ -46,27 +43,26 @@ files:
 - test/test_narray_miss.rb
 homepage: http://ruby.gfd-dennou.org/products/narray_miss/
 licenses: []
+metadata: {}
 post_install_message: 
 rdoc_options: []
 require_paths:
 - lib
 required_ruby_version: !ruby/object:Gem::Requirement
-  none: false
   requirements:
-  - - ! '>='
+  - - ">="
     - !ruby/object:Gem::Version
       version: '0'
 required_rubygems_version: !ruby/object:Gem::Requirement
-  none: false
   requirements:
-  - - ! '>='
+  - - ">="
     - !ruby/object:Gem::Version
       version: '0'
 requirements: []
 rubyforge_project: narray_miss
-rubygems_version: 1.8.24
+rubygems_version: 2.4.8
 signing_key: 
-specification_version: 3
+specification_version: 4
 summary: Additional class with processing of missing value to NArray
 test_files:
 - test/test_narray_miss.rb
diff --git a/narray_miss.gemspec b/narray_miss.gemspec
index daa6165..f8582db 100644
--- a/narray_miss.gemspec
+++ b/narray_miss.gemspec
@@ -13,13 +13,23 @@ Gem::Specification.new do |s|
 
   s.rubyforge_project = "narray_miss"
 
-  s.files         = `git ls-files`.split("\n")
-  s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
-  s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
+  s.files         = [
+    "Gemfile",
+    "LICENSE.txt",
+    "README.rdoc",
+    "Rakefile",
+    "lib/narray_miss.rb",
+    "lib/narray_miss/narray_miss.rb",
+    "lib/narray_miss/version.rb",
+    "narray_miss.gemspec",
+    "test/test_narray_miss.rb"
+  ]
+  s.test_files    = [ "test/test_narray_miss.rb" ]
+  s.executables   = []
   s.require_paths = ["lib"]
   #s.extensions << "ext/extconf.rb"
 
   # specify any dependencies here; for example:
   #s.add_development_dependency "rspec"
-  s.add_runtime_dependency "narray"
+  s.add_runtime_dependency "numru-narray"
 end
diff --git a/test/test_narray_miss.rb b/test/test_narray_miss.rb
index eee1cf0..eda37c7 100644
--- a/test/test_narray_miss.rb
+++ b/test/test_narray_miss.rb
@@ -1,6 +1,7 @@
 $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
 require "narray_miss"
 require "test/unit"
+include NumRu if defined?(:NumRu)
 
 class NArrayMissTest < Test::Unit::TestCase
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/narray-miss.git



More information about the Pkg-grass-devel mailing list