summaryrefslogtreecommitdiffstats
path: root/bin/emerge
diff options
context:
space:
mode:
Diffstat (limited to 'bin/emerge')
-rwxr-xr-xbin/emerge14
1 files changed, 12 insertions, 2 deletions
diff --git a/bin/emerge b/bin/emerge
index 6cefe9bcb..0ab37b6c5 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -3864,8 +3864,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.