summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-02-19 06:35:02 +0000
committerZac Medico <zmedico@gentoo.org>2007-02-19 06:35:02 +0000
commit8a9384617f20e91aab2ab50aee605f9f80744dc1 (patch)
tree3523b33bb67a5661e34bad97ca9a1d47442677ab /pym
parenteafe9e39bb9697e6e73cde309d052a908911dcd9 (diff)
downloadportage-8a9384617f20e91aab2ab50aee605f9f80744dc1.tar.gz
portage-8a9384617f20e91aab2ab50aee605f9f80744dc1.tar.bz2
portage-8a9384617f20e91aab2ab50aee605f9f80744dc1.zip
For bug #167450, optimize leaf node selection by ordering nodes from highest to lowest overall reference count.
svn path=/main/trunk/; revision=6010
Diffstat (limited to 'pym')
-rw-r--r--pym/emerge/__init__.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py
index 6c1043937..2ce384d46 100644
--- a/pym/emerge/__init__.py
+++ b/pym/emerge/__init__.py
@@ -1971,6 +1971,16 @@ class depgraph:
break
return acceptable
+ def _merge_order_bias(self, nodes):
+ """Order nodes from highest to lowest overall reference count for
+ optimal leaf node selection."""
+ node_info = {}
+ for node in self._parent_child_digraph.order:
+ node_info[node] = len(self.digraph.parent_nodes(node))
+ def cmp_merge_preference(node1, node2):
+ return node_info[node2] - node_info[node1]
+ nodes.sort(cmp_merge_preference)
+
def altlist(self, reversed=False):
if reversed in self._altlist_cache:
return self._altlist_cache[reversed][:]
@@ -1980,6 +1990,7 @@ class depgraph:
self._altlist_cache[reversed] = retlist[:]
return retlist
mygraph=self.digraph.copy()
+ self._merge_order_bias(mygraph.order)
myblockers = self.blocker_digraph.copy()
retlist=[]
circular_blocks = False