Move blocker handling from depgraph.create() to select_dep(). (trunk r7701)
authorZac Medico <zmedico@gentoo.org>
Thu, 6 Sep 2007 17:10:29 +0000 (17:10 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 6 Sep 2007 17:10:29 +0000 (17:10 -0000)
svn path=/main/branches/2.1.2/; revision=7733

bin/emerge

index fe702c5834acb5231a6ac340ceea8e0cf22bee04..7f61abeb15b9747596683905598fdd1eb03a0529 100755 (executable)
@@ -1251,16 +1251,6 @@ class depgraph:
 
                mytype, myroot, mykey = mybigkey
 
-               if mytype == "blocks":
-                       if myparent and \
-                               "--buildpkgonly" not in self.myopts and \
-                               "--nodeps" not in self.myopts and \
-                               myparent not in self._slot_collision_nodes:
-                               mybigkey[1] = myparent[1]
-                               self.blocker_parents.setdefault(
-                                       tuple(mybigkey), set()).add(myparent)
-                       return 1
-
                # select the correct /var database that we'll be checking against
                vardbapi = self.trees[myroot]["vartree"].dbapi
                portdb = self.trees[myroot]["porttree"].dbapi
@@ -1802,8 +1792,17 @@ class depgraph:
                        print "Candidates:",mymerge
                for x in mymerge:
                        selected_pkg = None
-                       if x[0]=="!":
-                               selected_pkg = (["blocks", myroot, x[1:]], None)
+                       if x.startswith("!"):
+                               if "--buildpkgonly" not in self.myopts and \
+                                       "--nodeps" not in self.myopts and \
+                                       myparent not in self._slot_collision_nodes:
+                                       p_type, p_root, p_key, p_status = myparent
+                                       if  p_type != "installed" and p_status != "merge":
+                                               # It's safe to ignore blockers from --onlydeps nodes.
+                                               continue
+                                       self.blocker_parents.setdefault(
+                                               ("blocks", p_root, x[1:]), set()).add(myparent)
+                               continue
                        else:
                                #We are not processing a blocker but a normal dependency
                                if myparent: