Prevent blockers that are only partially resolvable by merge order from accidentally... v2.1.2.7
authorZac Medico <zmedico@gentoo.org>
Mon, 7 May 2007 02:30:10 +0000 (02:30 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 7 May 2007 02:30:10 +0000 (02:30 -0000)
svn path=/main/branches/2.1.2/; revision=6495

bin/emerge

index 01506e08cc5fcf428c5ef30c53555530122c7c28..9ae6dd10e552dc5784d9fa9237a24a4798904681 100755 (executable)
@@ -975,6 +975,7 @@ class depgraph:
                self.args_keys = []
                self.blocker_digraph = digraph()
                self.blocker_parents = {}
+               self._unresolved_blocker_parents = {}
                self._slot_collision_info = []
                # Slot collision nodes are not allowed to block other packages since
                # blocker validation is only able to account for one package per slot.
@@ -1943,6 +1944,9 @@ class depgraph:
                                                self.blocker_digraph.addnode(node, blocker)
                                if not unresolved_blocks and not depends_on_order:
                                        self.blocker_parents[blocker].remove(parent)
+                               if unresolved_blocks:
+                                       self._unresolved_blocker_parents.setdefault(
+                                               blocker, set()).add(parent)
                        if not self.blocker_parents[blocker]:
                                del self.blocker_parents[blocker]
                # Validate blockers that depend on merge order.
@@ -2129,7 +2133,12 @@ class depgraph:
                                        for blocker in myblockers.root_nodes():
                                                if not myblockers.child_nodes(blocker):
                                                        myblockers.remove(blocker)
-                                                       del self.blocker_parents[blocker]
+                                                       unresolved = \
+                                                               self._unresolved_blocker_parents.get(blocker)
+                                                       if unresolved:
+                                                               self.blocker_parents[blocker] = unresolved
+                                                       else:
+                                                               del self.blocker_parents[blocker]
 
                if not reversed:
                        """Blocker validation does not work with reverse mode,