diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-04-27 06:38:37 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-04-27 06:38:37 +0000 |
commit | 9acab0e741cd8ad5a084c70c998c6d60138908a7 (patch) | |
tree | 44145b0eeb18fa2cf4a5fa10fb390d2780b6e65f /bin/emerge | |
parent | 20d63d57219657a14be2ba0333180ff82abb88d9 (diff) | |
download | portage-9acab0e741cd8ad5a084c70c998c6d60138908a7.tar.gz portage-9acab0e741cd8ad5a084c70c998c6d60138908a7.tar.bz2 portage-9acab0e741cd8ad5a084c70c998c6d60138908a7.zip |
Create a digraph.difference_update() method and use it to amortize the
cost of removing nodes from the digraph.order list. (trunk r9992)
svn path=/main/branches/2.1.2/; revision=9993
Diffstat (limited to 'bin/emerge')
-rwxr-xr-x | bin/emerge | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/bin/emerge b/bin/emerge index 5ced41356..053a3f6a2 100755 --- a/bin/emerge +++ b/bin/emerge @@ -3459,16 +3459,18 @@ class depgraph(object): # otherwise they slow down merge order calculation. Don't remove # non-root nodes since they help optimize merge order in some cases # such as revdep-rebuild. + removed_nodes = set() while True: - removed_something = False for node in mygraph.root_nodes(): if not isinstance(node, Package) or \ node.installed or node.onlydeps: - self.spinner.update() - mygraph.remove(node) - removed_something = True - if not removed_something: + removed_nodes.add(node) + if removed_nodes: + self.spinner.update() + mygraph.difference_update(removed_nodes) + if not removed_nodes: break + removed_nodes.clear() self._merge_order_bias(mygraph) def cmp_circular_bias(n1, n2): """ @@ -3818,6 +3820,8 @@ class depgraph(object): prefer_asap = True accept_root_node = False + mygraph.difference_update(selected_nodes) + for node in selected_nodes: # Handle interactions between blockers @@ -3853,7 +3857,7 @@ class depgraph(object): if node[-1] != "nomerge": retlist.append(node) - mygraph.remove(node) + if isinstance(node, Uninstall): # Include satisfied blockers in the merge list so # that the user can see why the package had to be |