commit 9fb9738c56afa2b052053d68cc41f15f41d95d2b Author: James Antill Date: Wed Mar 18 09:37:32 2009 -0400 Possible fix for weird kernel arch issue, add required_provides to update() diff --git a/yum/__init__.py b/yum/__init__.py index cd98260..c41ea62 100644 --- a/yum/__init__.py +++ b/yum/__init__.py @@ -2656,7 +2656,7 @@ class YumBase(depsolve.Depsolve): self.tsInfo.remove(txmbr.po.pkgtup) return found - def update(self, po=None, requiringPo=None, **kwargs): + def update(self, po=None, requiringPo=None, required_provides=[], **kwargs): """try to mark for update the item(s) specified. po is a package object - if that is there, mark it for update, if possible @@ -2750,6 +2750,12 @@ class YumBase(depsolve.Depsolve): availpkgs = self.pkgSack.searchNevra(name=nevra_dict['name'], epoch=nevra_dict['epoch'], arch=nevra_dict['arch'], ver=nevra_dict['version'], rel=nevra_dict['release']) + for prov in required_provides: + navailpkgs = [] + for apkg in availpkgs: + if apkg.checkPrco('provides', prov): + navailpkgs.append(apkg) + availpkgs = navailpkgs if len(availpkgs) > 1: availpkgs = self._compare_providers(availpkgs, requiringPo) availpkgs = map(lambda x: x[0], availpkgs) diff --git a/yum/depsolve.py b/yum/depsolve.py index 2061376..dbe896c 100644 --- a/yum/depsolve.py +++ b/yum/depsolve.py @@ -537,7 +537,7 @@ class Depsolve(object): for pkg in provSack.returnNewestByName(): results = self.update(requiringPo=requiringPo, name=pkg.name, epoch=pkg.epoch, version=pkg.version, - rel=pkg.rel) + rel=pkg.rel, required_provides=[requirement]) for txmbr in results: if pkg == txmbr.po: checkdeps = True diff --git a/yum/packages.py b/yum/packages.py index a7e81e6..8625a6f 100644 --- a/yum/packages.py +++ b/yum/packages.py @@ -27,6 +27,7 @@ import re import fnmatch import stat import warnings +import types from rpmUtils import RpmUtilsError import rpmUtils.arch import rpmUtils.miscutils @@ -364,7 +365,12 @@ class RpmBase(object): if True: # Keep indentation for patch smallness... # make us look it up and compare - (reqn, reqf, (reqe, reqv ,reqr)) = prcotuple + print "JDBG:", prcotuple + (reqn, reqf, reqv) = prcotuple + if type(reqv) in (types.StringType, types.UnicodeType): + (reqe, reqv ,reqr) = rpmUtils.miscutils.stringToVersion(reqv) + else: + (reqe, reqv ,reqr) = reqv if reqf is not None: return self.inPrcoRange(prcotype, prcotuple) else: @@ -381,7 +387,12 @@ class RpmBase(object): return bool(self.matchingPrcos(prcotype, reqtuple)) def matchingPrcos(self, prcotype, reqtuple): - (reqn, reqf, (reqe, reqv, reqr)) = reqtuple + (reqn, reqf, reqv) = reqtuple + if type(reqv) in (types.StringType, types.UnicodeType): + (reqe, reqv ,reqr) = rpmUtils.miscutils.stringToVersion(reqv) + else: + (reqe, reqv ,reqr) = reqv + reqtuple = (reqn, reqf, (reqe, reqv ,reqr)) # find the named entry in pkgobj, do the comparsion result = [] for (n, f, (e, v, r)) in self.returnPrco(prcotype):