[Yum-devel] [PATCH 3/3] A solution to the obsoletes but don't provide problem.

James Antill james at and.org
Mon Jun 18 20:26:32 UTC 2012


---
 yum/depsolve.py |   20 ++++++++++++++++++--
 1 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/yum/depsolve.py b/yum/depsolve.py
index 449cf48..aaed2f6 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -485,12 +485,28 @@ class Depsolve(object):
             # try to update the requiring package in hopes that all this problem goes away :(
             self.verbose_logger.log(logginglevels.DEBUG_2, _('Trying to update %s to resolve dep'), requiringPo)
             txmbrs = self.update(po=requiringPo, requiringPo=requiringPo)
+            fixed = False
             if not txmbrs:
                 msg = self._err_missing_requires(requiringPo, requirement)
-                self.verbose_logger.log(logginglevels.DEBUG_2, _('No update paths found for %s. Failure!'), requiringPo)
+                self.verbose_logger.log(logginglevels.DEBUG_2, _('No update paths found for %s. Failure due to requirement: %s!'), requiringPo, msg)
+            else:
+                req_lookup = (needname, needflags,
+                              rpmUtils.miscutils.stringToVersion(needversion))
+
+            for txmbr in txmbrs:
+                #  This works for upgrades, and for obsoletes, on one side.
+                # Also catches upgrades that don't work on the other.
+                if txmbr.ts_state == 'u':
+                    if not txmbr.po.checkPrco('requires', req_lookup):
+                        fixed = True
+                        break
+            if txmbrs and not fixed:
+                msg = self._err_missing_requires(requiringPo, requirement)
+                self.verbose_logger.log(logginglevels.DEBUG_2, _("Update for %s. Doesn't fix requirement: %s!"), requiringPo, msg)
+
+            if not fixed:
                 return self._requiringFromTransaction(requiringPo, requirement, errorlist)
             checkdeps = 1
-
             
         if needmode in ['e']:
             self.verbose_logger.log(logginglevels.DEBUG_2, _('TSINFO: %s package requiring %s marked as erase'),
-- 
1.7.6.5



More information about the Yum-devel mailing list