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

svn path=/main/trunk/; revision=10286

pym/_emerge/__init__.py

index f4ce23843acd2085537882fac5c431a23dc78854..1609700b5c69ab306bd382b2a95821685171318a 100644 (file)
@@ -4246,6 +4246,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)
@@ -4282,6 +4286,16 @@ class depgraph(object):
                                        if parent != inst_pkg:
                                                mygraph.add(blocker, parent)
 
+                       # 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
                depth = 0