Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r12580 - main/trunk/pym/portage
Date: Wed, 04 Feb 2009 04:05:27
Message-Id: E1LUZ0u-0001g1-RP@stork.gentoo.org
1 Author: zmedico
2 Date: 2009-02-04 04:05:24 +0000 (Wed, 04 Feb 2009)
3 New Revision: 12580
4
5 Modified:
6 main/trunk/pym/portage/__init__.py
7 Log:
8 Add support in digraph for multiple priorities per edge and support for
9 callable ignore_priority arguments that can be used for finer grained
10 filtering.
11
12
13 Modified: main/trunk/pym/portage/__init__.py
14 ===================================================================
15 --- main/trunk/pym/portage/__init__.py 2009-02-04 00:24:50 UTC (rev 12579)
16 +++ main/trunk/pym/portage/__init__.py 2009-02-04 04:05:24 UTC (rev 12580)
17 @@ -368,19 +368,15 @@
18 if parent not in self.nodes:
19 self.nodes[parent] = ({}, {}, parent)
20 self.order.append(parent)
21 -
22 - if parent in self.nodes[node][1]:
23 - if priority > self.nodes[node][1][parent]:
24 - self.nodes[node][1][parent] = priority
25 - else:
26 - self.nodes[node][1][parent] = priority
27 -
28 - if node in self.nodes[parent][0]:
29 - if priority > self.nodes[parent][0][node]:
30 - self.nodes[parent][0][node] = priority
31 - else:
32 - self.nodes[parent][0][node] = priority
33
34 + priorities = self.nodes[node][1].setdefault(parent, [])
35 + priorities.append(priority)
36 + priorities.sort()
37 +
38 + priorities = self.nodes[parent][0].setdefault(node, [])
39 + priorities.append(priority)
40 + priorities.sort()
41 +
42 def remove(self, node):
43 """Removes the specified node from the digraph, also removing
44 and ties to other nodes in the digraph. Raises KeyError if the
45 @@ -461,9 +457,16 @@
46 if ignore_priority is None:
47 return list(self.nodes[node][0])
48 children = []
49 - for child, priority in self.nodes[node][0].iteritems():
50 - if priority > ignore_priority:
51 - children.append(child)
52 + if hasattr(ignore_priority, '__call__'):
53 + for child, priorities in self.nodes[node][0].iteritems():
54 + for priority in priorities:
55 + if not ignore_priority(priority):
56 + children.append(child)
57 + break
58 + else:
59 + for child, priorities in self.nodes[node][0].iteritems():
60 + if ignore_priority < priorities[-1]:
61 + children.append(child)
62 return children
63
64 def parent_nodes(self, node, ignore_priority=None):
65 @@ -471,9 +474,16 @@
66 if ignore_priority is None:
67 return list(self.nodes[node][1])
68 parents = []
69 - for parent, priority in self.nodes[node][1].iteritems():
70 - if priority > ignore_priority:
71 - parents.append(parent)
72 + if hasattr(ignore_priority, '__call__'):
73 + for parent, priorities in self.nodes[node][1].iteritems():
74 + for priority in priorities:
75 + if not ignore_priority(priority):
76 + parents.append(parent)
77 + break
78 + else:
79 + for parent, priorities in self.nodes[node][1].iteritems():
80 + if ignore_priority < priorities[-1]:
81 + parents.append(parent)
82 return parents
83
84 def leaf_nodes(self, ignore_priority=None):
85 @@ -483,14 +493,31 @@
86 children in calculations."""
87
88 leaf_nodes = []
89 - for node in self.order:
90 - is_leaf_node = True
91 - for child in self.nodes[node][0]:
92 - if self.nodes[node][0][child] > ignore_priority:
93 - is_leaf_node = False
94 - break
95 - if is_leaf_node:
96 - leaf_nodes.append(node)
97 + if ignore_priority is None:
98 + for node in self.order:
99 + if not self.nodes[node][0]:
100 + leaf_nodes.append(node)
101 + elif hasattr(ignore_priority, '__call__'):
102 + for node in self.order:
103 + is_leaf_node = True
104 + for child, priorities in self.nodes[node][0].iteritems():
105 + for priority in priorities:
106 + if not ignore_priority(priority):
107 + is_leaf_node = False
108 + break
109 + if not is_leaf_node:
110 + break
111 + if is_leaf_node:
112 + leaf_nodes.append(node)
113 + else:
114 + for node in self.order:
115 + is_leaf_node = True
116 + for child, priorities in self.nodes[node][0].iteritems():
117 + if ignore_priority < priorities[-1]:
118 + is_leaf_node = False
119 + break
120 + if is_leaf_node:
121 + leaf_nodes.append(node)
122 return leaf_nodes
123
124 def root_nodes(self, ignore_priority=None):
125 @@ -500,14 +527,31 @@
126 parents in calculations."""
127
128 root_nodes = []
129 - for node in self.order:
130 - is_root_node = True
131 - for parent in self.nodes[node][1]:
132 - if self.nodes[node][1][parent] > ignore_priority:
133 - is_root_node = False
134 - break
135 - if is_root_node:
136 - root_nodes.append(node)
137 + if ignore_priority is None:
138 + for node in self.order:
139 + if not self.nodes[node][1]:
140 + root_nodes.append(node)
141 + elif hasattr(ignore_priority, '__call__'):
142 + for node in self.order:
143 + is_root_node = True
144 + for parent, priorities in self.nodes[node][1].iteritems():
145 + for priority in priorities:
146 + if not ignore_priority(priority):
147 + is_root_node = False
148 + break
149 + if not is_root_node:
150 + break
151 + if is_root_node:
152 + root_nodes.append(node)
153 + else:
154 + for node in self.order:
155 + is_root_node = True
156 + for parent, priorities in self.nodes[node][1].iteritems():
157 + if ignore_priority < priorities[-1]:
158 + is_root_node = False
159 + break
160 + if is_root_node:
161 + root_nodes.append(node)
162 return root_nodes
163
164 def is_empty(self):