Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r9993 - in main/branches/2.1.2: bin pym
Date: Sun, 27 Apr 2008 06:38:42
Message-Id: E1Jq0X1-0008UH-26@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-04-27 06:38:37 +0000 (Sun, 27 Apr 2008)
3 New Revision: 9993
4
5 Modified:
6 main/branches/2.1.2/bin/emerge
7 main/branches/2.1.2/pym/portage.py
8 Log:
9 Create a digraph.difference_update() method and use it to amortize the
10 cost of removing nodes from the digraph.order list. (trunk r9992)
11
12
13 Modified: main/branches/2.1.2/bin/emerge
14 ===================================================================
15 --- main/branches/2.1.2/bin/emerge 2008-04-27 06:31:11 UTC (rev 9992)
16 +++ main/branches/2.1.2/bin/emerge 2008-04-27 06:38:37 UTC (rev 9993)
17 @@ -3459,16 +3459,18 @@
18 # otherwise they slow down merge order calculation. Don't remove
19 # non-root nodes since they help optimize merge order in some cases
20 # such as revdep-rebuild.
21 + removed_nodes = set()
22 while True:
23 - removed_something = False
24 for node in mygraph.root_nodes():
25 if not isinstance(node, Package) or \
26 node.installed or node.onlydeps:
27 - self.spinner.update()
28 - mygraph.remove(node)
29 - removed_something = True
30 - if not removed_something:
31 + removed_nodes.add(node)
32 + if removed_nodes:
33 + self.spinner.update()
34 + mygraph.difference_update(removed_nodes)
35 + if not removed_nodes:
36 break
37 + removed_nodes.clear()
38 self._merge_order_bias(mygraph)
39 def cmp_circular_bias(n1, n2):
40 """
41 @@ -3818,6 +3820,8 @@
42 prefer_asap = True
43 accept_root_node = False
44
45 + mygraph.difference_update(selected_nodes)
46 +
47 for node in selected_nodes:
48
49 # Handle interactions between blockers
50 @@ -3853,7 +3857,7 @@
51
52 if node[-1] != "nomerge":
53 retlist.append(node)
54 - mygraph.remove(node)
55 +
56 if isinstance(node, Uninstall):
57 # Include satisfied blockers in the merge list so
58 # that the user can see why the package had to be
59
60 Modified: main/branches/2.1.2/pym/portage.py
61 ===================================================================
62 --- main/branches/2.1.2/pym/portage.py 2008-04-27 06:31:11 UTC (rev 9992)
63 +++ main/branches/2.1.2/pym/portage.py 2008-04-27 06:38:37 UTC (rev 9993)
64 @@ -391,6 +391,26 @@
65 del self.nodes[node]
66 self.order.remove(node)
67
68 + def difference_update(self, t):
69 + """
70 + Remove all given nodes from node_set. This is more efficient
71 + than multiple calls to the remove() method.
72 + """
73 + if isinstance(t, (list, tuple)) or \
74 + not hasattr(t, "__contains__"):
75 + t = frozenset(t)
76 + order = []
77 + for node in self.order:
78 + if node not in t:
79 + order.append(node)
80 + continue
81 + for parent in self.nodes[node][1]:
82 + del self.nodes[parent][0][node]
83 + for child in self.nodes[node][0]:
84 + del self.nodes[child][1][node]
85 + del self.nodes[node]
86 + self.order = order
87 +
88 def remove_edge(self, child, parent):
89 """
90 Remove edge in the direction from child to parent. Note that it is
91
92 --
93 gentoo-commits@l.g.o mailing list