[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