[GRASS-SVN] r50625 - in grass-addons/grass7/general: . g.compare.md5
svn_grass at osgeo.org
svn_grass at osgeo.org
Thu Feb 2 03:40:53 EST 2012
Author: lucadelu
Date: 2012-02-02 00:40:53 -0800 (Thu, 02 Feb 2012)
New Revision: 50625
Added:
grass-addons/grass7/general/g.compare.md5/
grass-addons/grass7/general/g.compare.md5/g.compare.md5.html
grass-addons/grass7/general/g.compare.md5/g.compare.md5.py
Removed:
grass-addons/grass7/general/g.compare.md5/g.md5sum.html
grass-addons/grass7/general/g.compare.md5/g.md5sum.py
grass-addons/grass7/general/g.md5sum/
Modified:
grass-addons/grass7/general/g.compare.md5/Makefile
Log:
g.md5sum renamed to g.compare.md5
Modified: grass-addons/grass7/general/g.compare.md5/Makefile
===================================================================
--- grass-addons/grass7/general/g.md5sum/Makefile 2012-02-02 07:57:17 UTC (rev 50624)
+++ grass-addons/grass7/general/g.compare.md5/Makefile 2012-02-02 08:40:53 UTC (rev 50625)
@@ -1,6 +1,6 @@
MODULE_TOPDIR = ../..
-PGM = g.md5sum
+PGM = g.compare.md5
include $(MODULE_TOPDIR)/include/Make/Script.make
Copied: grass-addons/grass7/general/g.compare.md5/g.compare.md5.html (from rev 50624, grass-addons/grass7/general/g.md5sum/g.md5sum.html)
===================================================================
--- grass-addons/grass7/general/g.compare.md5/g.compare.md5.html (rev 0)
+++ grass-addons/grass7/general/g.compare.md5/g.compare.md5.html 2012-02-02 08:40:53 UTC (rev 50625)
@@ -0,0 +1,33 @@
+<h2>DESCRIPTION</h2>
+
+<em>g.md5sum</em> is a module that check if two maps are identical. It use md5
+cryptographic hash function.
+For vector layer it does not check if attribute tables are identical too.
+
+<h2>EXAMPLE</h2>
+
+North Carolina example, with elevation map
+
+<div class="code"><pre>
+# copy the map
+g.copy rast=elevation,dem
+
+# now check and return true
+g.md5sum ain=elevation bin=dem
+
+# now change the color table
+r.colors map=dem color=srtm
+
+# check again e return false...
+g.md5sum ain=elevation bin=dem
+
+# but if add the -c flag return true again
+g.md5sum -c ain=elevation bin=dem
+
+</pre></div>
+
+<h2>AUTHORS</h2>
+
+Luca Delucchi, Fondazione Edmund Mach, Research and Innovation Centre,
+Department of Biodiversity and Molecular Ecology,
+<a href="http://gis.cri.fmach.it">GIS and Remote Sensing Unit</a>
Copied: grass-addons/grass7/general/g.compare.md5/g.compare.md5.py (from rev 50624, grass-addons/grass7/general/g.md5sum/g.md5sum.py)
===================================================================
--- grass-addons/grass7/general/g.compare.md5/g.compare.md5.py (rev 0)
+++ grass-addons/grass7/general/g.compare.md5/g.compare.md5.py 2012-02-02 08:40:53 UTC (rev 50625)
@@ -0,0 +1,202 @@
+#!/usr/bin/env python
+
+################################################################################
+#
+# MODULE: g.md5sum.py
+#
+# AUTHOR(S): Luca Delucchi <lucadeluge at gmail.com>
+#
+# PURPOSE: Check if two maps are the same
+#
+# COPYRIGHT: (c) 2012 by Luca Delucchi and the GRASS Development Team
+#
+# This program is free software under the GNU General
+# Public License (>=v2). Read the file COPYING that
+# comes with GRASS for details.
+#
+################################################################################
+
+#%module
+#% description: Check if two maps are identical
+#% keywords: general, map management, list
+#%end
+#%flag
+#% key: g
+#% description: Return output in shell script style (0 fail, 1 success)
+#%end
+#%flag
+#% key: c
+#% description: Does not consider the color table for raster
+#%end
+#%flag
+#% key: t
+#% description: Does not consider the topology for vector
+#%end
+#%option
+#% key: ainput
+#% type: string
+#% gisprompt: old,file,file
+#% description: Name of first map to check
+#% key_desc: name
+#% required : yes
+#%end
+#%option
+#% key: binput
+#% type: string
+#% gisprompt: old,file,file
+#% description: Name of second map to check
+#% required : yes
+#%end
+#%option G_OPT_M_DATATYPE
+#% key: type
+#% options: rast,vector
+#% answer: rast
+#%end
+
+import os, sys
+import hashlib
+import grass.script as grass
+
+def md5(fileName, excludeLine="", includeLine=""):
+ """Compute md5 hash of the specified file"""
+ m = hashlib.md5()
+ try:
+ fd = open(fileName,"rb")
+ except IOError:
+ print "Unable to open the file in readmode:", fileName
+ return
+ content = fd.readlines()
+ fd.close()
+ for eachLine in content:
+ if excludeLine and eachLine.startswith(excludeLine):
+ continue
+ m.update(eachLine)
+ m.update(includeLine)
+ return m.hexdigest()
+
+def checkfile(name, formatt,shell):
+ """Check if the input file exists"""
+ if formatt == "rast":
+ typ = "Raster"
+ inp = grass.find_file(name)
+ elif formatt == "vector":
+ typ = "Vector"
+ inp = grass.find_file(name,formatt)
+ if inp['name'] == '':
+ if shell:
+ grass.message(0)
+ return
+ else:
+ grass.fatal(_('%s %s does not exists' % (typ,name)))
+ else:
+ return inp
+
+def checkmd5(a,b,shell):
+ """Check if md5 is the same for both files"""
+ # check if the files exist and if the user have permission to read them
+ if os.path.exists(a) and os.path.exists(b):
+ if not os.access(a, os.R_OK):
+ if shell:
+ grass.message(0)
+ return
+ else:
+ grass.fatal(_('You have no permission to read %s file' % a))
+ if not os.access(b, os.R_OK):
+ if shell:
+ grass.message(0)
+ return
+ else:
+ grass.fatal(_('You have no permission to read %s file' % b))
+ # calculate the md5
+ amd5 = md5(a)
+ bmd5 = md5(b)
+ # check if md5 is the same
+ if amd5 == bmd5:
+ return 1
+ else:
+ return 0
+ # if both files doesn't exist this is good
+ elif not os.path.exists(a) and not os.path.exists(b):
+ return 1
+ # one file exists and the other not, this is not good result
+ else:
+ # if some files could be not exist add here other elif condition
+ return 0
+
+def main():
+ # check if we are in grass
+ gisbase = os.getenv('GISBASE')
+ if not gisbase:
+ grass.fatal(_('$GISBASE not defined'))
+ return 0
+ # check if shell script output is required
+ if flags['g']:
+ shell = True
+ err = 0
+ good = 1
+ else:
+ shell = False
+ err = _('The two files are different')
+ good = _('The two files are identical')
+ # options
+ typ = options['type']
+ ainp = checkfile(options['ainput'],typ,shell)
+ binp = checkfile(options['binput'],typ,shell)
+ variables = grass.core.gisenv()
+ # files to investigate to check identity
+ # for now color2 is ignored
+ raster_folder = [ "cats", "cell", "cellhd", "cell_misc", "fcell", "colr", "hist" ]
+ if flags['c']:
+ raster_folder.remove("colr")
+ vector_folder = [ "coor", "head", "topo" ]
+ if flags['t']:
+ vector_folder.remove("topo")
+ # path to the mapsets
+ aloc = os.path.join(variables['GISDBASE'],variables['LOCATION_NAME'],ainp['mapset'])
+ bloc = os.path.join(variables['GISDBASE'],variables['LOCATION_NAME'],binp['mapset'])
+ # variable for color table
+ md5color = 1
+ # start analysis for raster
+ if typ == "rast":
+ # for each folder
+ for fold in raster_folder:
+ # create the path to folder
+ apath = os.path.join(aloc,fold,ainp['name'])
+ bpath = os.path.join(bloc,fold,binp['name'])
+ # if folder is cell_misc it check the into files inside cell_misc folder
+ if fold == "cell_misc":
+ adirlist = os.listdir(apath)
+ bdirlist = os.listdir(bpath)
+ # if the files are the same check md5sum for each file
+ if adirlist == bdirlist:
+ for i in adirlist:
+ apath = os.path.join(apath,i)
+ bpath = os.path.join(bpath,i)
+ if not checkmd5(apath,bpath,shell):
+ grass.message(err)
+ return
+ # if the files are different return false
+ else:
+ grass.message(err)
+ return
+ # check md5sum for each file
+ else:
+ if not checkmd5(apath,bpath,shell):
+ grass.message(err)
+ return
+ grass.message(good)
+ return
+ # start analysis for vector
+ elif typ == "vector":
+ for fold in vector_folder:
+ apath = os.path.join(aloc,'vector',ainp['name'],fold)
+ bpath = os.path.join(bloc,'vector',binp['name'],fold)
+ if not checkmd5(apath,bpath,shell):
+ grass.message(err)
+ return
+ grass.message(good)
+ return
+
+if __name__ == "__main__":
+ options, flags = grass.parser()
+ sys.exit(main())
Deleted: grass-addons/grass7/general/g.compare.md5/g.md5sum.html
===================================================================
--- grass-addons/grass7/general/g.md5sum/g.md5sum.html 2012-02-02 07:57:17 UTC (rev 50624)
+++ grass-addons/grass7/general/g.compare.md5/g.md5sum.html 2012-02-02 08:40:53 UTC (rev 50625)
@@ -1,33 +0,0 @@
-<h2>DESCRIPTION</h2>
-
-<em>g.md5sum</em> is a module that check if two maps are identical. It use md5
-cryptographic hash function.
-For vector layer it does not check if attribute tables are identical too.
-
-<h2>EXAMPLE</h2>
-
-North Carolina example, with elevation map
-
-<div class="code"><pre>
-# copy the map
-g.copy rast=elevation,dem
-
-# now check and return true
-g.md5sum ain=elevation bin=dem
-
-# now change the color table
-r.colors map=dem color=srtm
-
-# check again e return false...
-g.md5sum ain=elevation bin=dem
-
-# but if add the -c flag return true again
-g.md5sum -c ain=elevation bin=dem
-
-</pre></div>
-
-<h2>AUTHORS</h2>
-
-Luca Delucchi, Fondazione Edmund Mach, Research and Innovation Centre,
-Department of Biodiversity and Molecular Ecology,
-<a href="http://gis.cri.fmach.it">GIS and Remote Sensing Unit</a>
Deleted: grass-addons/grass7/general/g.compare.md5/g.md5sum.py
===================================================================
--- grass-addons/grass7/general/g.md5sum/g.md5sum.py 2012-02-02 07:57:17 UTC (rev 50624)
+++ grass-addons/grass7/general/g.compare.md5/g.md5sum.py 2012-02-02 08:40:53 UTC (rev 50625)
@@ -1,202 +0,0 @@
-#!/usr/bin/env python
-
-################################################################################
-#
-# MODULE: g.md5sum.py
-#
-# AUTHOR(S): Luca Delucchi <lucadeluge at gmail.com>
-#
-# PURPOSE: Check if two maps are the same
-#
-# COPYRIGHT: (c) 2012 by Luca Delucchi and the GRASS Development Team
-#
-# This program is free software under the GNU General
-# Public License (>=v2). Read the file COPYING that
-# comes with GRASS for details.
-#
-################################################################################
-
-#%module
-#% description: Check if two maps are identical
-#% keywords: general, map management, list
-#%end
-#%flag
-#% key: g
-#% description: Return output in shell script style (0 fail, 1 success)
-#%end
-#%flag
-#% key: c
-#% description: Does not consider the color table for raster
-#%end
-#%flag
-#% key: t
-#% description: Does not consider the topology for vector
-#%end
-#%option
-#% key: ainput
-#% type: string
-#% gisprompt: old,file,file
-#% description: Name of first map to check
-#% key_desc: name
-#% required : yes
-#%end
-#%option
-#% key: binput
-#% type: string
-#% gisprompt: old,file,file
-#% description: Name of second map to check
-#% required : yes
-#%end
-#%option G_OPT_M_DATATYPE
-#% key: type
-#% options: rast,vector
-#% answer: rast
-#%end
-
-import os, sys
-import hashlib
-import grass.script as grass
-
-def md5(fileName, excludeLine="", includeLine=""):
- """Compute md5 hash of the specified file"""
- m = hashlib.md5()
- try:
- fd = open(fileName,"rb")
- except IOError:
- print "Unable to open the file in readmode:", fileName
- return
- content = fd.readlines()
- fd.close()
- for eachLine in content:
- if excludeLine and eachLine.startswith(excludeLine):
- continue
- m.update(eachLine)
- m.update(includeLine)
- return m.hexdigest()
-
-def checkfile(name, formatt,shell):
- """Check if the input file exists"""
- if formatt == "rast":
- typ = "Raster"
- inp = grass.find_file(name)
- elif formatt == "vector":
- typ = "Vector"
- inp = grass.find_file(name,formatt)
- if inp['name'] == '':
- if shell:
- grass.message(0)
- return
- else:
- grass.fatal(_('%s %s does not exists' % (typ,name)))
- else:
- return inp
-
-def checkmd5(a,b,shell):
- """Check if md5 is the same for both files"""
- # check if the files exist and if the user have permission to read them
- if os.path.exists(a) and os.path.exists(b):
- if not os.access(a, os.R_OK):
- if shell:
- grass.message(0)
- return
- else:
- grass.fatal(_('You have no permission to read %s file' % a))
- if not os.access(b, os.R_OK):
- if shell:
- grass.message(0)
- return
- else:
- grass.fatal(_('You have no permission to read %s file' % b))
- # calculate the md5
- amd5 = md5(a)
- bmd5 = md5(b)
- # check if md5 is the same
- if amd5 == bmd5:
- return 1
- else:
- return 0
- # if both files doesn't exist this is good
- elif not os.path.exists(a) and not os.path.exists(b):
- return 1
- # one file exists and the other not, this is not good result
- else:
- # if some files could be not exist add here other elif condition
- return 0
-
-def main():
- # check if we are in grass
- gisbase = os.getenv('GISBASE')
- if not gisbase:
- grass.fatal(_('$GISBASE not defined'))
- return 0
- # check if shell script output is required
- if flags['g']:
- shell = True
- err = 0
- good = 1
- else:
- shell = False
- err = _('The two files are different')
- good = _('The two files are identical')
- # options
- typ = options['type']
- ainp = checkfile(options['ainput'],typ,shell)
- binp = checkfile(options['binput'],typ,shell)
- variables = grass.core.gisenv()
- # files to investigate to check identity
- # for now color2 is ignored
- raster_folder = [ "cats", "cell", "cellhd", "cell_misc", "fcell", "colr", "hist" ]
- if flags['c']:
- raster_folder.remove("colr")
- vector_folder = [ "coor", "head", "topo" ]
- if flags['t']:
- vector_folder.remove("topo")
- # path to the mapsets
- aloc = os.path.join(variables['GISDBASE'],variables['LOCATION_NAME'],ainp['mapset'])
- bloc = os.path.join(variables['GISDBASE'],variables['LOCATION_NAME'],binp['mapset'])
- # variable for color table
- md5color = 1
- # start analysis for raster
- if typ == "rast":
- # for each folder
- for fold in raster_folder:
- # create the path to folder
- apath = os.path.join(aloc,fold,ainp['name'])
- bpath = os.path.join(bloc,fold,binp['name'])
- # if folder is cell_misc it check the into files inside cell_misc folder
- if fold == "cell_misc":
- adirlist = os.listdir(apath)
- bdirlist = os.listdir(bpath)
- # if the files are the same check md5sum for each file
- if adirlist == bdirlist:
- for i in adirlist:
- apath = os.path.join(apath,i)
- bpath = os.path.join(bpath,i)
- if not checkmd5(apath,bpath,shell):
- grass.message(err)
- return
- # if the files are different return false
- else:
- grass.message(err)
- return
- # check md5sum for each file
- else:
- if not checkmd5(apath,bpath,shell):
- grass.message(err)
- return
- grass.message(good)
- return
- # start analysis for vector
- elif typ == "vector":
- for fold in vector_folder:
- apath = os.path.join(aloc,'vector',ainp['name'],fold)
- bpath = os.path.join(bloc,'vector',binp['name'],fold)
- if not checkmd5(apath,bpath,shell):
- grass.message(err)
- return
- grass.message(good)
- return
-
-if __name__ == "__main__":
- options, flags = grass.parser()
- sys.exit(main())
More information about the grass-commit
mailing list