Allow scheduled uninstalls to be selected the same way as other leaf nodes.
authorZac Medico <zmedico@gentoo.org>
Fri, 9 May 2008 02:30:04 +0000 (02:30 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 9 May 2008 02:30:04 +0000 (02:30 -0000)
(trunk r10258)

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

bin/emerge

index f0d0a647c5e887be55006b84537dde7cf08fccdb..009e1a95b49a89d9acefb1e6a4f635c242cd866e 100755 (executable)
@@ -3769,7 +3769,8 @@ class depgraph(object):
                        """
                        return [node for node in mygraph.leaf_nodes(**kwargs) \
                                if isinstance(node, Package) and \
-                               node.operation != "uninstall"]
+                                       (node.operation != "uninstall" or \
+                                       node in scheduled_uninstalls)]
 
                # sys-apps/portage needs special treatment if ROOT="/"
                running_root = "/"
@@ -3966,13 +3967,6 @@ class depgraph(object):
                                        selected_nodes = list(selected_nodes)
                                selected_nodes.sort(cmp_circular_bias)
 
-                       if not selected_nodes and scheduled_uninstalls:
-                               selected_nodes = set()
-                               for node in scheduled_uninstalls:
-                                       if not mygraph.child_nodes(node):
-                                               selected_nodes.add(node)
-                               scheduled_uninstalls.difference_update(selected_nodes)
-
                        if not selected_nodes and not myblocker_uninstalls.is_empty():
                                # An Uninstall task needs to be executed in order to
                                # avoid conflict if possible.
@@ -4156,6 +4150,7 @@ class depgraph(object):
                                        "uninstall" == node.operation:
                                        have_uninstall_task = True
                                        uninst_task = node
+                                       scheduled_uninstalls.remove(uninst_task)
                                else:
                                        vardb = self.trees[node.root]["vartree"].dbapi
                                        previous_cpv = vardb.match(node.slot_atom)