[yum-git] yum/depsolve.py

Florian Festi ffesti at linux.duke.edu
Wed Feb 13 12:24:57 UTC 2008


 yum/depsolve.py |   81 ++++++++++++++------------------------------------------
 1 file changed, 21 insertions(+), 60 deletions(-)

New commits:
commit 114b10e8e07480edd601fb88def0bc4baadaa67d
Author: Florian Festi <ffesti at redhat.com>
Date:   Tue Feb 12 16:18:10 2008 +0100

    Use update() in _requiringFromInstalled() instead of specialized code
    Ignore packages that already got removed

diff --git a/yum/depsolve.py b/yum/depsolve.py
index bf2e703..8c784eb 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -281,13 +281,18 @@ class Depsolve(object):
         """processes the dependency resolution for a dep where the requiring 
            package is installed"""
 
-        (name, arch, epoch, ver, rel) = requiringPo.pkgtup
-        
-        (needname, needflags, needversion) = requirement
-        niceformatneed = rpmUtils.miscutils.formatRequire(needname, needversion, needflags)
         checkdeps = 0
         missingdep = 0
         
+        if self.tsInfo.getMembersWithState(requiringPo.pkgtup, TS_REMOVE_STATES):
+            return checkdeps, missingdep
+
+        name, arch, epoch, ver, rel = requiringPo.pkgtup
+
+        needname, needflags, needversion = requirement
+        niceformatneed = rpmUtils.miscutils.formatRequire(needname, needversion, needflags)
+
+
         # we must first find out why the requirement is no longer there
         # we must find out what provides/provided it from the rpmdb (if anything)
         # then check to see if that thing is being acted upon by the transaction set
@@ -352,63 +357,19 @@ class Depsolve(object):
             checkdeps = 1
         
         if needmode in ['i', 'u']:
-            obslist = []
-            # check obsoletes first
-            if self.conf.obsoletes:
-                if self.up.obsoleted_dict.has_key(requiringPo.pkgtup):
-                    obslist = self.up.obsoleted_dict[requiringPo.pkgtup]
-                    self.verbose_logger.log(logginglevels.DEBUG_1,
-                        _('Looking for Obsoletes for %s'), requiringPo)
-                
-            if len(obslist) > 0:
-                po = None
-                for pkgtup in obslist:
-                    po = self.getPackageObject(pkgtup)
-                if po:
-                    for (new, old) in self.up.getObsoletesTuples(): # FIXME query the obsoleting_list now?
-                        if po.pkgtup == new:
-                            txmbr = self.tsInfo.addObsoleting(po, requiringPo)
-                            self.tsInfo.addObsoleted(requiringPo, po)
-                            txmbr.setAsDep(po=needpo)
-                            self.verbose_logger.log(logginglevels.DEBUG_2, _('TSINFO: Obsoleting %s with %s to resolve dep.'), 
-                                requiringPo, 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 len(uplist) > 0:
-                if name not in self.conf.exactarchlist:
-                    pkgs = self.pkgSack.returnNewestByName(name)
-                    archs = {}
-                    for pkg in pkgs:
-                        archs[pkg.arch] = pkg
-                    a = rpmUtils.arch.getBestArchFromList(archs.keys())
-                    po = archs[a]
+            length = len(self.tsInfo)
+            self.update(name=name, epoch=epoch, version=ver, release=rel)
+            txmbrs = self.tsInfo.getMembersWithState(requiringPo.pkgtup, TS_REMOVE_STATES)
+            if len(self.tsInfo) != length and txmbrs:
+                if txmbrs[0].output_state == TS_OBSOLETED:
+                    self.verbose_logger.log(logginglevels.DEBUG_2, _('TSINFO: Obsoleting %s with %s to resolve dep.'),
+                                            requiringPo, txmbr.obsoleted_by[0])
                 else:
-                    po = self.pkgSack.returnNewestByNameArch((name,arch))[0]
-                if po.pkgtup not in uplist:
-                    po = None
-
-            if po:
-                for (new, old) in self.up.getUpdatesTuples():
-                    if po.pkgtup == new:
-                        txmbr = self.tsInfo.addUpdate(po, requiringPo)
-                        txmbr.setAsDep(po=needpo)
-                        txmbr.reason = "dep"
-                        self.verbose_logger.log(logginglevels.DEBUG_2, _('TSINFO: Updating %s to resolve dep.'), po)
-                checkdeps = 1
-                
-            else: # if there's no update then pass this over to requringFromTransaction()
-                self.verbose_logger.log(logginglevels.DEBUG_2, _('Cannot find an update path for dep for: %s'), niceformatneed)
-                
-                reqpkg = (name, ver, rel, None)
-                return self._requiringFromTransaction(requiringPo, requirement, errorlist)
+                    self.verbose_logger.log(logginglevels.DEBUG_2, _('TSINFO: Updating %s to resolve dep.'), requiringPo)
+                checkdeps = True
+                return checkdeps, missingdep
+            self.verbose_logger.log(logginglevels.DEBUG_2, _('Cannot find an update path for dep for: %s'), niceformatneed)
+            return self._requiringFromTransaction(requiringPo, requirement, errorlist)
             
 
         if needmode is None:



More information about the Yum-cvs-commits mailing list