1 |
Author: zmedico |
2 |
Date: 2008-11-23 07:47:43 +0000 (Sun, 23 Nov 2008) |
3 |
New Revision: 12052 |
4 |
|
5 |
Modified: |
6 |
main/branches/2.1.6/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Fix the code from bug #245358 so that it's guaranteed to traverse all the |
9 |
way to a root node, even when circular deps are encountered. (trunk r12051) |
10 |
|
11 |
|
12 |
Modified: main/branches/2.1.6/pym/_emerge/__init__.py |
13 |
=================================================================== |
14 |
--- main/branches/2.1.6/pym/_emerge/__init__.py 2008-11-23 07:46:59 UTC (rev 12051) |
15 |
+++ main/branches/2.1.6/pym/_emerge/__init__.py 2008-11-23 07:47:43 UTC (rev 12052) |
16 |
@@ -5395,17 +5395,19 @@ |
17 |
traversed_nodes.add(node) |
18 |
msg.append('(dependency required by "%s" [%s])' % \ |
19 |
(colorize('INFORM', str(node.cpv)), node.type_name)) |
20 |
- parent = None |
21 |
+ # When traversing to parents, prefer arguments over packages |
22 |
+ # since arguments are root nodes. Never traverse the same |
23 |
+ # package twice, in order to prevent an infinite loop. |
24 |
+ selected_parent = None |
25 |
for parent in self.digraph.parent_nodes(node): |
26 |
- if parent in traversed_nodes: |
27 |
- parent = None |
28 |
- continue |
29 |
if isinstance(parent, DependencyArg): |
30 |
msg.append('(dependency required by "%s" [argument])' % \ |
31 |
(colorize('INFORM', str(parent)))) |
32 |
- parent = None |
33 |
+ selected_parent = None |
34 |
break |
35 |
- node = parent |
36 |
+ if parent not in traversed_nodes: |
37 |
+ selected_parent = parent |
38 |
+ node = selected_parent |
39 |
for line in msg: |
40 |
print line |