diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-02-02 19:19:19 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-02-02 19:19:19 +0000 |
commit | 062708caaebd000ef7398e769397302b2f99825a (patch) | |
tree | 9cc144bbd2efe4a8300140ced36ed4d65183ea90 | |
parent | e589ece0600c449238d70f543eaba2f32a93ef5f (diff) | |
download | portage-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__.py | 27 |
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. |