If the uninstall task did not need to be executed because
authorZac Medico <zmedico@gentoo.org>
Sat, 10 May 2008 18:17:11 +0000 (18:17 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 10 May 2008 18:17:11 +0000 (18:17 -0000)
of an upgrade, display Blocker -> Upgrade edges since the
corresponding Blocker -> Uninstall edges will not be shown.
(trunk r10286)

svn path=/main/branches/2.1.2/; revision=10287

bin/emerge

index 91618ecc990ab6d4f427fd62510f263ff028cae8..44a3fceae7360b0c192c96151173a8c23fd87348 100755 (executable)
@@ -4398,6 +4398,10 @@ class depgraph(object):
 
                # If there are any Uninstall instances, add the corresponding
                # blockers to the digraph (useful for --tree display).
+
+               executed_uninstalls = set(node for node in mylist \
+                       if isinstance(node, Package) and node.operation == "unmerge")
+
                for uninstall in self._blocker_uninstalls.leaf_nodes():
                        uninstall_parents = \
                                self._blocker_uninstalls.parent_nodes(uninstall)
@@ -4434,8 +4438,15 @@ class depgraph(object):
                                        if parent != inst_pkg:
                                                mygraph.add(blocker, parent)
 
-               tree = "--tree" in self.myopts
-               
+                       # If the uninstall task did not need to be executed because
+                       # of an upgrade, display Blocker -> Upgrade edges since the
+                       # corresponding Blocker -> Uninstall edges will not be shown.
+                       upgrade_node = \
+                               self._slot_pkg_map[uninstall.root].get(uninstall.slot_atom)
+                       if upgrade_node is not None and \
+                               uninstall not in executed_uninstalls:
+                               for blocker in uninstall_parents:
+                                       mygraph.add(upgrade_node, blocker)
 
                unsatisfied_blockers = []
                i = 0