[Yum-devel] [PATCH 4/4] save metadata in pkg order

Zdeněk Pavlas zpavlas at redhat.com
Fri Nov 23 15:28:19 UTC 2012


---
 createrepo/__init__.py |   33 ++++++++++++++++++++++-----------
 1 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/createrepo/__init__.py b/createrepo/__init__.py
index 0f1cfee..e1836c7 100644
--- a/createrepo/__init__.py
+++ b/createrepo/__init__.py
@@ -543,6 +543,7 @@ class MetaDataGenerator:
         # go on their merry way
         
         newpkgs = []
+        keptpkgs = []
         if self.conf.update:
             # if we're in --update mode then only act on the new/changed pkgs
             for pkg in pkglist:
@@ -558,11 +559,7 @@ class MetaDataGenerator:
                     if self.conf.verbose:
                         self.callback.log(_("Using data from old metadata for %s")
                                             % pkg)
-
-                    old_po.basepath = self.conf.baseurl # reset baseurl in the old pkg
-                    self.primaryfile.write(old_po.xml_dump_primary_metadata())
-                    self.flfile.write(old_po.xml_dump_filelists_metadata())
-                    self.otherfile.write(old_po.xml_dump_other_metadata())
+                    keptpkgs.append((pkg, old_po))
 
                     #FIXME - if we're in update and we have deltas enabled
                     # check the presto data for this pkg and write its info back out
@@ -594,15 +591,23 @@ class MetaDataGenerator:
                 self.read_pkgs.append(pkg)
             
             if po:
-                self.primaryfile.write(po.xml_dump_primary_metadata())
-                self.flfile.write(po.xml_dump_filelists_metadata())
-                self.otherfile.write(po.xml_dump_other_metadata(
-                                     clog_limit=self.conf.changelog_limit))
+                keptpkgs.append((pkg, po))
                 continue
                 
             pkgfiles.append(pkg)
-            
-       
+
+        # this is going to be merged..
+        keptpkgs.sort(reverse=True)
+        def save_keptpkgs(upto=None):
+            while keptpkgs and (upto is None or keptpkgs[-1][0] < upto):
+                po = keptpkgs.pop()[1]
+                # reset baseurl in the old pkg
+                po.basepath = self.conf.baseurl
+                self.primaryfile.write(po.xml_dump_primary_metadata())
+                self.flfile.write(po.xml_dump_filelists_metadata())
+                self.otherfile.write(po.xml_dump_other_metadata(
+                    clog_limit=self.conf.changelog_limit))
+
         if pkgfiles:
             # divide that list by the number of workers and fork off that many
             # workers to tmpdirs
@@ -613,6 +618,7 @@ class MetaDataGenerator:
             if self.conf.workers < 1:
                 self.conf.workers = num_cpus_online()
             worker_chunks = [[] for i in range(self.conf.workers)]
+            pkgfiles.sort()
             for i, pkg in enumerate(pkgfiles):
                 worker_chunks[i % self.conf.workers].append(pkg)
             worker_cmd_dict = {}
@@ -651,6 +657,9 @@ class MetaDataGenerator:
             
             files = self.primaryfile, self.flfile, self.otherfile
             for i, pkg in enumerate(pkgfiles):
+                # merge keptpkgs
+                save_keptpkgs(pkg)
+
                 num = i % self.conf.workers
                 stream = worker_jobs[num].stdout
                 while True:
@@ -681,6 +690,8 @@ class MetaDataGenerator:
                         continue
                 self.read_pkgs.append(pkgfile)
 
+        # append anything that's left
+        save_keptpkgs()
         return self.current_pkg
 
 
-- 
1.7.4.4



More information about the Yum-devel mailing list