For bug #181953, prevent the circular_blocks code from selecting a node that's alread...
authorZac Medico <zmedico@gentoo.org>
Mon, 30 Jul 2007 04:06:52 +0000 (04:06 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 30 Jul 2007 04:06:52 +0000 (04:06 -0000)
svn path=/main/branches/2.1.2.9/; revision=7463

bin/emerge

index 31868d2fb793e4d47f5ee47346da8b27cf986ae7..244ed3c9fe1c403504e379a39a17a1e16c5fdcd5 100755 (executable)
@@ -2086,8 +2086,16 @@ class depgraph:
                                        if not circular_blocks:
                                                circular_blocks = True
                                                blocker_deps = myblockers.leaf_nodes()
-                                       if blocker_deps:
-                                               selected_nodes = [blocker_deps.pop()]
+                                       while blocker_deps:
+                                               # Some of these nodes might have already been selected
+                                               # by the normal node selection process after the
+                                               # circular_blocks flag has been set.  Therefore, we
+                                               # have to verify that they're still in the graph so
+                                               # that they're not selected more than once.
+                                               node = blocker_deps.pop()
+                                               if mygraph.contains(node):
+                                                       selected_nodes = [node]
+                                                       break
 
                        if not selected_nodes:
                                # No leaf nodes are available, so we have a circular