For bugs #197810 and #215308, pass the depgraph's "selective" parameter
authorZac Medico <zmedico@gentoo.org>
Sun, 30 Mar 2008 02:13:19 +0000 (02:13 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 30 Mar 2008 02:13:19 +0000 (02:13 -0000)
down into dep_check() for better atom preference selection when handling
virtuals and other disjunctive || dependencies. (branches/2.1.2 r9610)

svn path=/main/trunk/; revision=9611

pym/_emerge/__init__.py
pym/portage/__init__.py

index d03a2eacb740d9fed2cf2236f965cdcef5805cf5..328b7f1e9ce15503e8fc8ea52a73388ac9ed987a 100644 (file)
@@ -2484,12 +2484,14 @@ class depgraph(object):
                                myuse=myuse, strict=strict)
                if True:
                        try:
+                               self.trees[root]["selective"] = "selective" in self.myparams
                                if not strict:
                                        portage.dep._dep_check_strict = False
                                mycheck = portage.dep_check(depstring, None,
                                        pkgsettings, myuse=myuse,
                                        myroot=root, trees=trees)
                        finally:
+                               self.trees[root]["selective"] = False
                                portage.dep._dep_check_strict = True
                        if not mycheck[0]:
                                raise portage.exception.InvalidDependString(mycheck[1])
index 745ecb38c67499ee5ef7d78be000a373aaec87a2..9407d2a90472fa7acfd153af146e9e9bb23320df 100644 (file)
@@ -5315,6 +5315,7 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None):
        if trees is None:
                global db
                trees = db
+       selective = trees[myroot].get("selective", False)
        writemsg("ZapDeps -- %s\n" % (use_binaries), 2)
        if not reduced or unreduced == ["||"] or dep_eval(reduced):
                return []
@@ -5378,7 +5379,7 @@ def dep_zapdeps(unreduced, reduced, myroot, use_binaries=0, trees=None):
                                has_mask = False
                                if hasattr(mydbapi, "xmatch"):
                                        has_mask = bool(mydbapi.xmatch("match-all", atom))
-                               if (use_binaries or not has_mask):
+                               if (selective or use_binaries or not has_mask):
                                        avail_pkg = best(vardb.match(atom))
                                        if avail_pkg:
                                                avail_slot = "%s:%s" % (dep_getkey(atom),