SF.net SVN: gar:[22933] csw/mgar/gar/v2/lib/python/compare_catalog.py

cgrzemba at users.sourceforge.net cgrzemba at users.sourceforge.net
Sun Feb 2 21:43:31 CET 2014


Revision: 22933
          http://sourceforge.net/p/gar/code/22933
Author:   cgrzemba
Date:     2014-02-02 20:43:29 +0000 (Sun, 02 Feb 2014)
Log Message:
-----------
implement dictionary compare

Modified Paths:
--------------
    csw/mgar/gar/v2/lib/python/compare_catalog.py

Modified: csw/mgar/gar/v2/lib/python/compare_catalog.py
===================================================================
--- csw/mgar/gar/v2/lib/python/compare_catalog.py	2014-02-02 00:56:30 UTC (rev 22932)
+++ csw/mgar/gar/v2/lib/python/compare_catalog.py	2014-02-02 20:43:29 UTC (rev 22933)
@@ -6,13 +6,34 @@
 import urllib2
 import sys
 import re
+from lib.python import catalog
 
 logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s')
 logger = logging.getLogger(__name__)
 
 remote_scheme = ['http','https']
 local_scheme = ['file']
+catalog_keys = ['catalogname','version','pkgname','file_basename',
+                    'md5sum','size','deps','category','i_deps']
 
+def SplitPkgList(pkglist):
+      if not pkglist:
+        pkglist = ()
+      elif pkglist == "none":
+        pkglist = ()
+      else:
+        pkglist = tuple(pkglist.split("|"))
+      return pkglist
+
+def convToDict(catlst):
+    catdict = []
+    for entry in catlst:
+        del entry[9]
+	entry[6] = SplitPkgList(entry[6])
+	entry[8] = SplitPkgList(entry[8])
+        catdict.append(dict(zip(catalog_keys,entry)))
+    return catdict
+
 def prepareCatListFromURI(uri):
     catlst = []
     if '://' in uri:
@@ -20,52 +41,14 @@
         if scheme in remote_scheme:
             logger.info("fetch remote %s", uri)
             data = urllib2.urlopen(uri).read()
-            catlst = cjson.decode(data)
-            for e in catlst:
-                del e[9]
-            return catlst
+            return convToDict(cjson.decode(data))
         elif scheme in local_scheme:
             uri = re.sub('.*://','',uri)
         else:
             logger.error('unsupported URI format')
             sys.exit(4)
-    with open(uri) as lcat:
-        logger.info("fetch local %s", uri)
-        for line in lcat: # skip 4 lines header '# CREATIONDATE'
-            if line.startswith("# CREATIONDATE"): 
-                break
-        for line in lcat:
-            if line.startswith("-----BEGIN PGP SIGNATURE"): 
-                break
-            catlst.append(line.rstrip().split(' '))
-    return catlst
-            
-def compareOutOfOrder(a_catlst, b_catlst, idx):
-    a_pkgName2Idx = {}
-    i = idx 
-    for j in range(idx,len(a_catlst)):
-        a_pkgName2Idx[a_catlst[j][0]] = j
-    # import pdb; pdb.set_trace()
-    while i < len(b_catlst):
-        if b_catlst[i][0] in a_pkgName2Idx:
-            if b_catlst[i] != a_catlst[a_pkgName2Idx[b_catlst[i][0]]]:
-                logger.warning("pkgs different at {0},{1}: {2} {3}".format(i,a_pkgName2Idx[b_catlst[i][0]],a_catlst[a_pkgName2Idx[b_catlst[i][0]]],b_catlst[i]))
-                sys.exit(1)
-        else:
-            logger.warning("not in acat: %s", b_catlst[i])
-            sys.exit(1)
-        i += 1 
-    b_pkgName2Idx = {}
-    for j in range(idx,len(b_catlst)):
-        b_pkgName2Idx[b_catlst[j][0]] = j
-    # import pdb; pdb.set_trace()
-    i = idx
-    while i < len(a_catlst):
-        if a_catlst[i][0] not in b_pkgName2Idx:
-            logger.warning("not in bcat: %s", a_catlst[i])
-            sys.exit(1)
-        i += 1 
-        
+    return catalog.OpencswCatalog(open(uri)).GetCatalogData()
+
 def main():
     parser = argparse.ArgumentParser()
     parser.add_argument("-v","--verbose", dest="verbose", action="store_true",default=False)
@@ -86,26 +69,15 @@
     b_catlst = prepareCatListFromURI(args.bcat)
 
     logger.info("compare ...")
-    if len(a_catlst) != len(b_catlst):
-        logger.warning("a has %d, b has %d packages",len(a_catlst),len(b_catlst))
-        # sys.exit(1)
-    for i in range(len(b_catlst)):
-        try:
-            if b_catlst[i] != a_catlst[i] :
-                if b_catlst[i][0] != a_catlst[i][0]: 
-                    logger.warning("packages out of order: A: %s; B: %s",a_catlst[i][0], b_catlst[i][0])
-                    compareOutOfOrder(a_catlst, b_catlst, i)
-                    break
-                else:
-                    logger.warning("pkgs different: {0} {1}".format(a_catlst[i],b_catlst[i]))
-                    sys.exit(1)
-        except IndexError as e:
-            logger.info("package %s not in acat", b_catlst[i])
-            
-    # import pdb; pdb.set_trace()
-    logger.info("catalogs are same")
-    sys.exit(0)
+    if a_catlst == b_catlst:
+        logger.info("catalogs are same")
+        sys.exit(0)
+    else:
+        for i in range(len(a_catlst)):
+	    for k in catalog_keys:
+                if a_catlst[i][k] != b_catlst[i][k]:
+                    logger.warning("catalogs are different; package index:%d, kex: %s", i, k);
+        sys.exit(1)
 
-
 if __name__ == '__main__':
     main()

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the devel mailing list