Blob Blame History Raw
--- dumpMetadata.py~	2006-03-04 01:30:50.000000000 -0500
+++ dumpMetadata.py	2009-08-10 16:55:10.000000000 -0400
@@ -559,14 +559,32 @@
         """return a checksum for a package:
            - check if the checksum cache is enabled
               if not - return the checksum
-              if so - check to see if it has a cache file
+              if so - search for a usable key in the header
+              - check to see if it has a cache file
                 if so, open it and return the first line's contents
                 if not, grab the checksum and write it to a file for this pkg
             """
         if not self.options['cache']:
             return getChecksum(self.options['sumtype'], fo)
+     
+        # first try the easy ones
+        key = None
+        for h in (rpm.RPMTAG_SHA1HEADER, rpm.RPMTAG_RSAHEADER, rpm.RPMTAG_DSAHEADER):
+            key = self.hdr[h]
+            if key:
+                break
+
+        # now the not so easy ones
+        if not key:
+            for h in (rpm.RPMTAG_SIGPGP, rpm.RPMTAG_SIGMD5, rpm.RPMTAG_SIGGPG):
+                key = self.hdr[h]
+                if key:
+                    # generate hexdigest from signature
+                    key = "".join([hex(ord(x))[2:].zfill(2)
+                                for x in tuple(self.hdr[h])])
+                    break
         
-        csumtag = '%s-%s' % (self.hdr['name'] , self.hdr[rpm.RPMTAG_SHA1HEADER])
+        csumtag = '%s-%s' % (self.hdr['name'], key)
         csumfile = '%s/%s' % (self.options['cachedir'], csumtag)
         if os.path.exists(csumfile) and self.mtime <= os.stat(csumfile)[8]:
             csumo = open(csumfile, 'r')