Alon Bar-Lev has uploaded a new change for review. Change subject: core: miniyum: fix provides in addition to packages ......................................................................
core: miniyum: fix provides in addition to packages 1. pull only native arch. 2. pull only latest version of package for each provides. Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1073172 Change-Id: I6b161c167ad410e2ad54dba2be5cda6cc8c6239e Signed-off-by: Alon Bar-Lev <[email protected]> --- M src/otopi/miniyum.py 1 file changed, 67 insertions(+), 13 deletions(-) git pull ssh://gerrit.ovirt.org:29418/otopi refs/changes/02/25702/1 diff --git a/src/otopi/miniyum.py b/src/otopi/miniyum.py index 0a24bd4..7b11a5b 100755 --- a/src/otopi/miniyum.py +++ b/src/otopi/miniyum.py @@ -31,6 +31,9 @@ _ = lambda m: gettext.dgettext(message=m, domain='otopi') +import rpmUtils.miscutils + + import yum import yum.rpmtrans import yum.callbacks @@ -356,9 +359,9 @@ @classmethod def _get_package_name(clz, po): - return '%s-%s%s-%s.%s' % ( + return '%s%s-%s-%s.%s' % ( + '' if po.epoch == '0' else '%s:' % po.epoch, po.name, - '%s:' % po.epoch if po.epoch == 0 else '', po.version, po.release, po.arch @@ -437,6 +440,55 @@ return ret + def _queryProvides(self, packages, showdups=None): + database = {} + ret = [] + + for po in self._yb.searchPackageProvides(args=packages): + if po.arch in ( + list(self._yb.arch.legit_multi_arches) + + ['noarch'] + ): + database.setdefault( + '%s%s' % ( + po.epoch, + po.name, + ), + [], + ).append(po) + + if showdups: + ret = sum(database.values(), []) + else: + for entry in database.values(): + class EVR(object): + + def _evr(self, po): + return ( + po['epoch'], + po['version'], + po['release'], + ) + + def __init__(self, po): + self._po = po + + def __cmp__(self, other): + return rpmUtils.miscutils.compareEVR( + self._evr(self._po), + self._evr(other._po), + ) + + ret.append( + sorted( + entry, + key=lambda x: EVR(x), + reverse=True, + )[0] + ) + + return ret + def _queue( self, action, @@ -454,12 +506,9 @@ 'queue package %s for %s' % (package, action) ) - mergedpatterns = [] + provides = self._queryProvides(packages=(package,)) - for po in self._yb.searchPackageProvides(args=(package,)): - mergedpatterns.append(MiniYum._get_package_name(po)) - - if not mergedpatterns: + if not provides: raise RuntimeError( _('Package {package} cannot be found').format( package=package, @@ -467,7 +516,7 @@ ) holder = self._yb.doPackageLists( - patterns=mergedpatterns, + patterns=[self._get_package_name(p) for p in provides], ) for po in getpackages(holder): @@ -930,15 +979,20 @@ def queryPackages(self, pkgnarrow='all', patterns=None, showdups=None): try: with self._disableOutput: - mergedpatterns = list(patterns) ret = [] - - for po in self._yb.searchPackageProvides(args=patterns): - mergedpatterns.append(MiniYum._get_package_name(po)) holder = self._yb.doPackageLists( pkgnarrow=pkgnarrow, - patterns=mergedpatterns, + patterns=( + list(patterns) + + [ + self._get_package_name(p) + for p in self._queryProvides( + packages=patterns, + showdups=showdups, + ) + ] + ), showdups=showdups, ) for op, l in ( -- To view, visit http://gerrit.ovirt.org/25702 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6b161c167ad410e2ad54dba2be5cda6cc8c6239e Gerrit-PatchSet: 1 Gerrit-Project: otopi Gerrit-Branch: master Gerrit-Owner: Alon Bar-Lev <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
