summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-02-02 19:19:19 +0000
committerZac Medico <zmedico@gentoo.org>2009-02-02 19:19:19 +0000
commit062708caaebd000ef7398e769397302b2f99825a (patch)
tree9cc144bbd2efe4a8300140ced36ed4d65183ea90
parente589ece0600c449238d70f543eaba2f32a93ef5f (diff)
downloadportage-062708caaebd000ef7398e769397302b2f99825a.tar.gz
portage-062708caaebd000ef7398e769397302b2f99825a.tar.bz2
portage-062708caaebd000ef7398e769397302b2f99825a.zip
In depgraph._serialize_tasks(), when separating uninstall nodes from leaf
nodes, do it earlier so that it covers more code paths. svn path=/main/trunk/; revision=12570
-rw-r--r--pym/_emerge/__init__.py27
1 files changed, 16 insertions, 11 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 772a2df3f..982ea6de4 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -6898,21 +6898,26 @@ class depgraph(object):
for ignore_priority in ignore_priority_soft_range:
nodes = get_nodes(ignore_priority=ignore_priority)
if nodes:
+ # If there is a mix of uninstall nodes with other
+ # types, save the uninstall nodes for later since
+ # sometimes a merge node will render an uninstall
+ # node unnecessary (due to occupying the same slot),
+ # and we want to avoid executing a separate uninstall
+ # task in that case.
+ if len(nodes) > 1:
+ non_uninstalls = [node for node in nodes \
+ if node.operation != "uninstall"]
+ if non_uninstalls:
+ nodes = non_uninstalls
+ else:
+ nodes = nodes
+
if ignore_priority is None and not tree_mode:
# Greedily pop all of these nodes since no
# relationship has been ignored. This optimization
# destroys --tree output, so it's disabled in tree
- # mode. If there is a mix of merge and uninstall
- # nodes, save the uninstall nodes for later since
- # sometimes a merge node will render an install
- # node unnecessary, and we want to avoid doing a
- # separate uninstall task in that case.
- merge_nodes = [node for node in nodes \
- if node.operation == "merge"]
- if merge_nodes:
- selected_nodes = merge_nodes
- else:
- selected_nodes = nodes
+ # mode.
+ selected_nodes = nodes
else:
# For optimal merge order:
# * Only pop one node.