From: Zac Medico Date: Mon, 2 Feb 2009 19:19:19 +0000 (-0000) Subject: In depgraph._serialize_tasks(), when separating uninstall nodes from leaf X-Git-Tag: v2.2_rc24~232 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=062708caaebd000ef7398e769397302b2f99825a;p=portage.git 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 --- 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.