Blob Blame History Raw
From 84a237f6a2e661879147e1ee5f9a2be984267991 Mon Sep 17 00:00:00 2001
From: Zdenek Pavlas <zpavlas@redhat.com>
Date: Wed, 23 Oct 2013 11:42:02 +0200
Subject: [PATCH] Make sure the "packages" attribute is always correct. BZ
 1022001

We create XML files in one pass and the package count is stored
first. We need the count to be correct, so when a package is
being skipped, it must be a fatal error.
---
 createrepo/__init__.py | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/createrepo/__init__.py b/createrepo/__init__.py
index dfdc8ab..452a3ac 100644
--- a/createrepo/__init__.py
+++ b/createrepo/__init__.py
@@ -399,7 +399,17 @@ class MetaDataGenerator:
             self._setup_old_metadata_lookup()
         # rpms we're going to be dealing with
         if self.conf.pkglist:
-            packages = self.conf.pkglist
+            packages = []
+            for pkg in self.conf.pkglist:
+                if '://' in pkg: # remote
+                    packages.append(pkg)
+                    continue
+                path = os.path.join(self.conf.basedir, self.conf.directory, pkg)
+                if os.access(path, os.R_OK):
+                    packages.append(pkg)
+                    continue
+                # not fatal, yet
+                self.callback.errorlog('Cannot read file: %s' % path)
         else:
             packages = self.getFileList(self.package_dir, '.rpm')
 
@@ -670,6 +680,8 @@ class MetaDataGenerator:
                         return # EOF, EOF
                     if stream is job.stdout:
                         if line.startswith('*** '):
+                            if line == '*** \n':
+                                return True
                             # get data, save to local files
                             for out, size in zip(files, line[4:].split()):
                                 out.write(stream.read(int(size)))
@@ -678,12 +690,14 @@ class MetaDataGenerator:
                     else:
                         self.callback.errorlog('Worker %s: %s' % (num, line.rstrip()))
 
+            err = 0
             for i, pkg in enumerate(pkgfiles):
                 # insert cached packages
                 save_keptpkgs(pkg)
 
                 # save output to local files
-                log_messages(i % self.conf.workers)
+                if log_messages(i % self.conf.workers):
+                    err += 1
 
             for (num, job) in worker_jobs.items():
                 # process remaining messages on stderr
@@ -697,6 +711,9 @@ class MetaDataGenerator:
             if not self.conf.quiet:
                 self.callback.log("Workers Finished")
                     
+            if err:
+                raise MDError, "Failed to process %d package(s)." % err
+
             for pkgfile in pkgfiles:
                 if self.conf.deltas:
                     try:
-- 
1.7.11.7

commit f49cdb7e99d98f06a9080dd4b5dc3fcd020bf1ab
Author: Zdenek Pavlas <zpavlas@redhat.com>
Date:   Wed Oct 23 14:58:30 2013 +0200

    Clean up tempdir on failures. BZ 1022515

diff --git a/genpkgmetadata.py b/genpkgmetadata.py
index 1c175b8..946f6b6 100755
--- a/genpkgmetadata.py
+++ b/genpkgmetadata.py
@@ -287,6 +287,12 @@ def main(args):
 
     except MDError, errormsg:
         errorprint(_('%s') % errormsg)
+        # cleanup
+        tmp = os.path.join(conf.outputdir, conf.tempdir)
+        if os.path.exists(tmp):
+            for name in os.listdir(tmp):
+                os.unlink(os.path.join(tmp, name))
+            os.rmdir(tmp)
         sys.exit(1)