[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