Move blocker handling from depgraph.create() to select_dep().
authorZac Medico <zmedico@gentoo.org>
Sat, 25 Aug 2007 23:02:53 +0000 (23:02 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 25 Aug 2007 23:02:53 +0000 (23:02 -0000)
svn path=/main/trunk/; revision=7701

pym/emerge/__init__.py

index e2149c0c717cddb7d5fac5b1926b6404bc8fd526..8354da39f463f857c254880105c5fd1041adb581 100644 (file)
@@ -1169,16 +1169,6 @@ class depgraph(object):
 
                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
@@ -1724,8 +1714,17 @@ class depgraph(object):
                        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: