[yum-cvs] yum/yum __init__.py,1.94,1.95 depsolve.py,1.59,1.60
Seth Vidal
skvidal at login.linux.duke.edu
Fri Mar 11 09:00:46 UTC 2005
Update of /home/groups/yum/cvs/yum/yum
In directory login:/tmp/cvs-serv14706/yum
Modified Files:
__init__.py depsolve.py
Log Message:
in the event we can't find a resolving package, look for obsoletes (as well
as updates) of the requiring package to get out of the unresolveable dep.
Index: __init__.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/__init__.py,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -r1.94 -r1.95
--- __init__.py 7 Mar 2005 07:01:28 -0000 1.94
+++ __init__.py 11 Mar 2005 09:00:39 -0000 1.95
@@ -38,7 +38,7 @@
from urlgrabber.grabber import URLGrabError
import depsolve
-from packages import parsePackages, YumLocalPackage, YumInstalledPackage
+from packages import parsePackages, YumLocalPackage, YumInstalledPackage, bestPackage
from repomd import mdErrors
class YumBase(depsolve.Depsolve):
@@ -1081,7 +1081,7 @@
if po.pkgtup == pkgtup:
return po
- pkgs = self.pkgSack.searchNevra(name=n, arch=a, epoch=e, ver=v, rel=r)
+ pkgs = self.pkgSack.packagesByTuple(pkgtup)
if len(pkgs) == 0:
raise Errors.DepError, 'Package tuple %s could not be found in packagesack' % pkgtup
@@ -1166,3 +1166,36 @@
continue
return best
+
+ def bestPackageFromList(self, pkglist):
+ """take list of package objects and return the best package object.
+ If the list is empty, raise Errors.YumBaseError"""
+
+ # duh
+ if len(pkglist) == 1:
+ for po in pkglist:
+ return po
+
+ best = pkglist[0]
+ for pkg in pkglist[1:]:
+ if len(pkg.name) < len(best.name): # shortest name silliness
+ best = pkg
+ continue
+ elif len(pkg.name) > len(best.name):
+ continue
+ else:
+ if pkg.name == best.name:
+ bestup = bestPackage(pkg.pkgtup, best.pkgtup)
+ if best.pkgtup == bestup:
+ continue
+ elif pkg.pkgtup == bestup:
+ best = pkg
+ continue
+ else:
+ mylist=[best, pkg]
+ mylist.sort(cmp=self.sortPkgObj) # first name, alphabetically
+ best = mylist[0]
+ continue
+
+ return best
+
Index: depsolve.py
===================================================================
RCS file: /home/groups/yum/cvs/yum/yum/depsolve.py,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- depsolve.py 4 Mar 2005 08:39:45 -0000 1.59
+++ depsolve.py 11 Mar 2005 09:00:40 -0000 1.60
@@ -415,10 +415,34 @@
if needmode in ['i', 'u']:
self.doUpdateSetup()
+ obslist = []
+ # check obsoletes first
+ if self.conf.obsoletes:
+ obslist = self.up.getObsoletedList(name=name)
+ self.log(4, 'Looking for Obsoletes for %s' % name)
+
+ if len(obslist) > 0:
+ po = None
+ for pkgtup in obslist:
+ po = self.getPackageObject(pkgtup)
+ if po:
+ for (new, old) in self.up.getObsoletesTuples():
+ if po.pkgtup == new:
+ obsoleted_pkg = packages.YumInstalledPackage(self.rpmdb.returnHeaderByTuple(old)[0])
+ txmbr = self.tsInfo.addObsoleting(po, obsoleted_pkg)
+ self.tsInfo.addObsoleted(obsoleted_pkg, po)
+ txmbr.setAsDep(pkgtup = needpkgtup)
+ self.log(5, 'TSINFO: Obsoleting %s with %s to resolve dep.' % (obsoleted_pkg, po))
+ checkdeps = 1
+ return checkdeps, missingdep
+
+
+ # check updates second
+ uplist = []
uplist = self.up.getUpdatesList(name=name)
+ # if there's an update for the reqpkg, then update it
po = None
- # if there's an update for the reqpkg, then update it
if len(uplist) > 0:
if not self.conf.exactarch:
pkgs = self.pkgSack.returnNewestByName(name)
More information about the Yum-cvs-commits
mailing list