diff --git a/src/pypungi/__init__.py b/src/pypungi/__init__.py index 059b748..337b32a 100644 --- a/src/pypungi/__init__.py +++ b/src/pypungi/__init__.py @@ -506,22 +506,22 @@ class Pungi(pypungi.PungiBase): else: # nogreedy for name in searchlist: - arch = None - if "." in name: - name, arch = name.rsplit(".", 1) + packages_by_name = {} + exactmatched, matched, unmatched = yum.packages.parsePackages(self.ayum.pkgSack.returnPackages(), [name], casematch=1) + matches = filter(self._filtersrcdebug, exactmatched + matched) - pkg_sack = self.ayum.pkgSack.searchNevra(name=name, arch=arch) - # filter sources out of the package sack - pkg_sack = [ i for i in pkg_sack if i.arch not in ("src", "nosrc") ] - pkg_sack = self.excludePackages(pkg_sack) - - match = self.ayum._bestPackageFromList(pkg_sack) - if not match: + if not matches: self.logger.warn('Could not find a match for %s in any configured repo' % name) continue - self.ayum.tsInfo.addInstall(match) - self.logger.info('Found %s.%s' % (match.name, match.arch)) + for i in matches: + packages_by_name.setdefault(i.name, []).append(i) + + for i, pkg_sack in packages_by_name.iteritems(): + pkg_sack = self.excludePackages(pkg_sack) + match = self.ayum._bestPackageFromList(pkg_sack) + self.ayum.tsInfo.addInstall(match) + self.logger.info('Found %s.%s' % (match.name, match.arch)) if len(self.ayum.tsInfo) == 0: raise yum.Errors.MiscError, 'No packages found to download.'