* [gentoo-commits] portage r9992 - in main/trunk/pym: _emerge portage
@ 2008-04-27 6:31 Zac Medico (zmedico)
0 siblings, 0 replies; only message in thread
From: Zac Medico (zmedico) @ 2008-04-27 6:31 UTC (permalink / raw
To: gentoo-commits
Author: zmedico
Date: 2008-04-27 06:31:11 +0000 (Sun, 27 Apr 2008)
New Revision: 9992
Modified:
main/trunk/pym/_emerge/__init__.py
main/trunk/pym/portage/__init__.py
Log:
Create a digraph.difference_update() method and use it to amortize the
cost of removing nodes from the digraph.order list.
Modified: main/trunk/pym/_emerge/__init__.py
===================================================================
--- main/trunk/pym/_emerge/__init__.py 2008-04-27 00:44:34 UTC (rev 9991)
+++ main/trunk/pym/_emerge/__init__.py 2008-04-27 06:31:11 UTC (rev 9992)
@@ -3312,16 +3312,18 @@
# 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):
"""
@@ -3671,6 +3673,8 @@
prefer_asap = True
accept_root_node = False
+ mygraph.difference_update(selected_nodes)
+
for node in selected_nodes:
# Handle interactions between blockers
@@ -3706,7 +3710,7 @@
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
Modified: main/trunk/pym/portage/__init__.py
===================================================================
--- main/trunk/pym/portage/__init__.py 2008-04-27 00:44:34 UTC (rev 9991)
+++ main/trunk/pym/portage/__init__.py 2008-04-27 06:31:11 UTC (rev 9992)
@@ -389,6 +389,26 @@
del self.nodes[node]
self.order.remove(node)
+ def difference_update(self, t):
+ """
+ Remove all given nodes from node_set. This is more efficient
+ than multiple calls to the remove() method.
+ """
+ if isinstance(t, (list, tuple)) or \
+ not hasattr(t, "__contains__"):
+ t = frozenset(t)
+ order = []
+ for node in self.order:
+ if node not in t:
+ order.append(node)
+ continue
+ for parent in self.nodes[node][1]:
+ del self.nodes[parent][0][node]
+ for child in self.nodes[node][0]:
+ del self.nodes[child][1][node]
+ del self.nodes[node]
+ self.order = order
+
def remove_edge(self, child, parent):
"""
Remove edge in the direction from child to parent. Note that it is
--
gentoo-commits@lists.gentoo.org mailing list
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-04-27 6:31 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-27 6:31 [gentoo-commits] portage r9992 - in main/trunk/pym: _emerge portage Zac Medico (zmedico)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox