[Yum-devel] [PATCH 5/5] Add the provides data for each pkg, to format_missing_requires. Add relations.

James Antill james at and.org
Fri Mar 19 04:43:18 UTC 2010


---
 output.py |   38 +++++++++++++++++++++++++++++++++-----
 1 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/output.py b/output.py
index b09730a..aa5dc4d 100755
--- a/output.py
+++ b/output.py
@@ -1660,24 +1660,52 @@ class DepSolveProgressCallBack:
         if not yb:
             return msg
         
+        def _msg_pkg(action, pkg, needname):
+            " Add a package to the message, including any provides matches. "
+            msg = _('\n    %s: %s (%s)') % (action, pkg, pkg.ui_from_repo)
+            needtup = (needname, None, (None, None, None))
+            done = False
+            for pkgtup in pkg.matchingPrcos('provides', needtup):
+                done = True
+                msg += _('\n        %s') % yum.misc.prco_tuple_to_string(pkgtup)
+            if not done:
+                msg += _('\n        Not found')
+            return msg
+
         ipkgs = set()
         for pkg in sorted(yb.rpmdb.getProvides(needname)):
-            ipkgs.add(pkg.pkgtup)
+            nevr = (pkg.name, pkg.epoch, pkg.version, pkg.release)
+            ipkgs.add(nevr)
             action = _('Installed')
-            if yb.tsInfo.getMembersWithState(pkg.pkgtup, TS_REMOVE_STATES):
+            rmed = yb.tsInfo.getMembersWithState(pkg.pkgtup, TS_REMOVE_STATES)
+            if rmed:
                 action = _('Removing')
-            msg += _('\n    %s: %s (%s)') % (action, pkg, pkg.ui_from_repo)
+            msg += _msg_pkg(action, pkg, needname)
+            # These should be the only three things we care about:
+            relmap = {'updatedby' : _('Updated By'),
+                      'downgradedby' : _('Downgraded By'),
+                      'obsoletedby' :  _('Obsoleted By'),
+                      }
+            for txmbr in rmed:
+                for (rpkg, rtype) in txmbr.relatedto:
+                    if rtype not in relmap:
+                        continue
+                    nevr = (rpkg.name, rpkg.epoch, rpkg.version, rpkg.release)
+                    ipkgs.add(nevr)
+                    msg += _msg_pkg(relmap[rtype], rpkg, needname)
+
         last = None
         for pkg in sorted(yb.pkgSack.getProvides(needname)):
             #  We don't want to see installed packages, or N packages of the
             # same version, from different repos.
-            if pkg.pkgtup in ipkgs or pkg.verEQ(last):
+            nevr = (pkg.name, pkg.epoch, pkg.version, pkg.release)
+            if nevr in ipkgs or (pkg.verEQ(last) and pkg.arch == last.arch):
                 continue
             last = pkg
             action = _('Available')
             if yb.tsInfo.getMembersWithState(pkg.pkgtup, TS_INSTALL_STATES):
                 action = _('Installing')
-            msg += _('\n    %s: %s (%s)') % (action, pkg, pkg.repoid)
+            msg += _msg_pkg(action, pkg, needname)
         return msg
     
     def procConflict(self, name, confname):
-- 
1.6.6.1



More information about the Yum-devel mailing list