createrepo/__init__.py genpkgmetadata.py

[email protected] (Seth Vidal)
Newsgroups gmane.linux.rpm.metadata
Message-ID <[email protected]>
 createrepo/__init__.py |   36 +++++++++++++++++++++++++++++-------
 genpkgmetadata.py      |    6 +++++-
 2 files changed, 34 insertions(+), 8 deletions(-)

New commits:
commit 552129a339ce182217547acd71f0d82225e04246
Author: Seth Vidal <[email protected]>
Date:   Mon Jan 28 16:57:37 2008 -0500

    part of --unique-md-filenames is complete. This lets createrepo
    generate metadata files with the file's checksum included in the
    filename. This helps it work more nicely with proxies. --update support will not
    work with --unique-md-filenames at the moment. Need to read in repomd.xml to make that
    work.

diff --git a/createrepo/__init__.py b/createrepo/__init__.py
index d3f8534..429bb07 100644
--- a/createrepo/__init__.py
+++ b/createrepo/__init__.py
@@ -86,6 +86,7 @@ class MetaDataConfig(object):
         self.directory = None
         self.directories = []
         self.changelog_limit = None # needs to be an int or None
+        self.unique_md_filenames = False
         
 
 class SimpleMDCallBack(object):
@@ -292,7 +293,8 @@ class MetaDataGenerator:
         # function for the first dir passed to --split, not all of them
         # this needs to be fixed by some magic in readMetadata.py
         # using opts.pkgdirs as a list, I think.
-        
+        # FIXME - this needs to read the old repomd.xml to figure out where
+        # the files WERE to pass in the right fns.
         if self.conf.update:
             #build the paths
             primaryfile = os.path.join(self.conf.outputdir, self.conf.finaldir, self.conf.primaryfile)
@@ -496,7 +498,7 @@ class MetaDataGenerator:
             zfo.close()
             csum = misc.checksum(sumtype, complete_path)
             timestamp = os.stat(complete_path)[8]
-            
+
             db_csums = {}
             db_compressed_sums = {}
             
@@ -525,7 +527,7 @@ class MetaDataGenerator:
                 compressed_name = '%s.bz2' % good_name
                 result_compressed = os.path.join(repopath, compressed_name)
                 db_csums[ftype] = misc.checksum(sumtype, resultpath)
-                
+
                 # compress the files
                 bzipFile(resultpath, result_compressed)
                 # csum the compressed file
@@ -533,6 +535,13 @@ class MetaDataGenerator:
                 # remove the uncompressed file
                 os.unlink(resultpath)
 
+                if self.conf.unique_md_filenames:
+                    csum_compressed_name = '%s-%s.bz2' % (good_name, db_compressed_sums[ftype])
+                    csum_result_compressed =  os.path.join(repopath, csum_compressed_name)
+                    os.rename(result_compressed, csum_result_compressed)
+                    result_compressed = csum_result_compressed
+                    compressed_name = csum_compressed_name
+                    
                 # timestamp the compressed file
                 db_timestamp = os.stat(result_compressed)[8]
                 
@@ -558,15 +567,28 @@ class MetaDataGenerator:
                 
             data = reporoot.newChild(None, 'data', None)
             data.newProp('type', ftype)
-            location = data.newChild(None, 'location', None)
-            if self.conf.baseurl is not None:
-                location.newProp('xml:base', self.conf.baseurl)
-            location.newProp('href', os.path.join(self.conf.finaldir, file))
+
             checksum = data.newChild(None, 'checksum', csum)
             checksum.newProp('type', sumtype)
             timestamp = data.newChild(None, 'timestamp', str(timestamp))
             unchecksum = data.newChild(None, 'open-checksum', uncsum)
             unchecksum.newProp('type', sumtype)
+            location = data.newChild(None, 'location', None)
+            if self.conf.baseurl is not None:
+                location.newProp('xml:base', self.conf.baseurl)
+            if self.conf.unique_md_filenames:
+                res_file = '%s-%s.xml.gz' % (ftype, csum)
+                orig_file = os.path.join(repopath, file)
+                dest_file = os.path.join(repopath, res_file)
+                os.rename(orig_file, dest_file)
+                
+            else:
+                res_file = file
+
+            file = res_file #???
+            
+            location.newProp('href', os.path.join(self.conf.finaldir, file))
+
 
         if not self.conf.quiet and self.conf.database: self.callback.log('Sqlite DBs complete')        
         # if we've got a group file then checksum it once and be done
diff --git a/genpkgmetadata.py b/genpkgmetadata.py
index e46b0a7..6b9560f 100755
--- a/genpkgmetadata.py
+++ b/genpkgmetadata.py
@@ -83,7 +83,11 @@ def parseArgs(args, conf):
                       help="ignore symlinks of packages")
     parser.add_option("--changelog-limit", dest="changelog_limit",
                       default=None, help="only import the last N changelog entries")
-
+    parser.add_option("--unique-md-filenames", dest="unique_md_filenames",
+                      default=False, action="store_true",
+                      help="include the file's checksum in the filename, helps" \
+                           "with proxies")
+                           
     (opts, argsleft) = parser.parse_args()
     if len(argsleft) > 1 and not opts.split:
         errorprint(_('Error: Only one directory allowed per run.'))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.