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: