For bug #181953, prevent the circular_blocks code from selecting a node that's alread...
authorZac Medico <zmedico@gentoo.org>
Wed, 13 Jun 2007 21:48:27 +0000 (21:48 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 13 Jun 2007 21:48:27 +0000 (21:48 -0000)
svn path=/main/branches/2.1.2/; revision=6838

bin/emerge

index dee541b7219aa297d52cb9e2f4315f6790f76ec1..41d0220d5ea4fc426b75fc70111bc9aa1c79d81b 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