Fix the code from bug #245358 so that it's guaranteed to traverse all the
authorZac Medico <zmedico@gentoo.org>
Sun, 23 Nov 2008 07:47:43 +0000 (07:47 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 23 Nov 2008 07:47:43 +0000 (07:47 -0000)
way to a root node, even when circular deps are encountered. (trunk r12051)

svn path=/main/branches/2.1.6/; revision=12052

pym/_emerge/__init__.py

index c69998e67caaff8e9ae7a7d32b22e09c05e56356..e73455023ab9af3ef9fec0611a7442c0c5e68748 100644 (file)
@@ -5395,17 +5395,19 @@ class depgraph(object):
                        traversed_nodes.add(node)
                        msg.append('(dependency required by "%s" [%s])' % \
                                (colorize('INFORM', str(node.cpv)), node.type_name))
-                       parent = None
+                       # When traversing to parents, prefer arguments over packages
+                       # since arguments are root nodes. Never traverse the same
+                       # package twice, in order to prevent an infinite loop.
+                       selected_parent = None
                        for parent in self.digraph.parent_nodes(node):
-                               if parent in traversed_nodes:
-                                       parent = None
-                                       continue
                                if isinstance(parent, DependencyArg):
                                        msg.append('(dependency required by "%s" [argument])' % \
                                                (colorize('INFORM', str(parent))))
-                                       parent = None
+                                       selected_parent = None
                                        break
-                       node = parent
+                               if parent not in traversed_nodes:
+                                       selected_parent = parent
+                       node = selected_parent
                for line in msg:
                        print line