[Rpm-metadata] modifyrepo.py

zpavlas at osuosl.org zpavlas at osuosl.org
Tue Oct 1 08:57:18 UTC 2013


 modifyrepo.py |   23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

New commits:
commit 43634a17a26986546865d0376db5a771ceff35c4
Author: Zdenek Pavlas <zpavlas at redhat.com>
Date:   Mon Sep 30 16:47:04 2013 +0200

    modifyrepo: fix handling of already compressed input. BZ 1013733
    
    - drop the file extension when decompressing source
    - recompress if compression is enabled
    - calculate opensize and openchecksum from decompressed data

diff --git a/modifyrepo.py b/modifyrepo.py
index f9d346c..3c8a8bd 100755
--- a/modifyrepo.py
+++ b/modifyrepo.py
@@ -32,7 +32,7 @@ import sys
 from createrepo import __version__
 from createrepo.utils import checksum_and_rename, compressOpen, MDError
 from createrepo.utils import _available_compression
-from yum.misc import checksum, _available_checksums
+from yum.misc import checksum, _available_checksums, AutoFileChecksums
 
 from yum.repoMDObject import RepoMD, RepoMDError, RepoData
 from xml.dom import minidom
@@ -105,27 +105,25 @@ class RepoMetadata:
             mdname = 'updateinfo.xml'
         elif isinstance(metadata, str):
             if os.path.exists(metadata):
-                if metadata.split('.')[-1] in ('gz', 'bz2', 'xz'):
+                mdname = os.path.basename(metadata)
+                if mdname.split('.')[-1] in ('gz', 'bz2', 'xz'):
+                    mdname = mdname.rsplit('.', 1)[0]
                     oldmd = compressOpen(metadata, mode='rb')
                 else:
                     oldmd = file(metadata, 'r')
+                oldmd = AutoFileChecksums(oldmd, [self.checksum_type])
                 md = oldmd.read()
                 oldmd.close()
-                mdname = os.path.basename(metadata)
             else:
                 raise MDError, '%s not found' % metadata
         else:
             raise MDError, 'invalid metadata type'
 
-        do_compress = False
         ## Compress the metadata and move it into the repodata
-        if self.compress and mdname.split('.')[-1] not in ('gz', 'bz2', 'xz'):
-            do_compress = True
-            mdname += '.' + self.compress_type
         mdtype = self._get_mdtype(mdname, mdtype)
-
         destmd = os.path.join(self.repodir, mdname)
-        if do_compress:
+        if self.compress:
+            destmd += '.' + self.compress_type
             newmd = compressOpen(destmd, mode='wb', compress_type=self.compress_type)
         else:
             newmd = open(destmd, 'wb')
@@ -134,7 +132,6 @@ class RepoMetadata:
         newmd.close()
         print "Wrote:", destmd
 
-        open_csum = checksum(self.checksum_type, metadata)
         if self.unique_md_filenames:
             csum, destmd = checksum_and_rename(destmd, self.checksum_type)
         else:
@@ -149,9 +146,9 @@ class RepoMetadata:
         new_rd.location = (None, 'repodata/' + base_destmd)
         new_rd.checksum = (self.checksum_type, csum)
         new_rd.size = str(os.stat(destmd).st_size)
-        if do_compress:
-            new_rd.openchecksum = (self.checksum_type, open_csum)
-            new_rd.opensize = str(os.stat(metadata).st_size)
+        if self.compress:
+            new_rd.openchecksum = oldmd.checksums.hexdigests().popitem()
+            new_rd.opensize = str(oldmd.checksums.length)
         new_rd.timestamp = str(int(os.stat(destmd).st_mtime))
         self.repoobj.repoData[new_rd.type] = new_rd
         self._print_repodata(new_rd)


More information about the Rpm-metadata mailing list