summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/__init__.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 15e57047e..a18f5255b 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -3712,8 +3712,18 @@ class depgraph(object):
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 reversed mode.
- selected_nodes = nodes
+ # output, so it's disabled in reversed mode. If there
+ # is a mix of merge and uninstall nodes, save the
+ # uninstall nodes from 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
else:
# For optimal merge order:
# * Only pop one node.