In depgraph.create(), if a direct circular dependency is
authorZac Medico <zmedico@gentoo.org>
Mon, 22 Oct 2007 22:41:32 +0000 (22:41 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 22 Oct 2007 22:41:32 +0000 (22:41 -0000)
not an unsatisfied buildtime dependency then drop it here
since otherwise it can skew the merge order calculation
in an unwanted way. (trunk r8233)

svn path=/main/branches/2.1.2/; revision=8234

bin/emerge

index def6f7b2432760998bc005c67b32b80e23b308f8..6fcbad7f76dbedba54ba889e3861f381ef9c498a 100755 (executable)
@@ -1350,13 +1350,16 @@ class depgraph:
                        if existing_node:
                                e_type, myroot, e_cpv, e_status = existing_node
                                if mykey == e_cpv:
-                                       # The existing node can be reused. It's okay for a
-                                       # node to depend on itself here if priority.satisfied
-                                       # is True, otherwise it is a circular dependency that
-                                       # can not be ignored.
+                                       # The existing node can be reused.
                                        self._parent_child_digraph.add(existing_node, myparent)
-                                       self.digraph.addnode(existing_node, myparent,
-                                               priority=priority)
+                                       # If a direct circular dependency is not an unsatisfied
+                                       # buildtime dependency then drop it here since otherwise
+                                       # it can skew the merge order calculation in an unwanted
+                                       # way.
+                                       if existing_node != myparent or \
+                                               (priority.buildtime and not priority.satisfied):
+                                               self.digraph.addnode(existing_node, myparent,
+                                                       priority=priority)
                                        return 1
                                else:
                                        if jbigkey in self._slot_collision_nodes: