Make all the python code respect USE conditionals in RESTRICT. It's already handled...
authorZac Medico <zmedico@gentoo.org>
Thu, 7 Jun 2007 18:57:04 +0000 (18:57 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 7 Jun 2007 18:57:04 +0000 (18:57 -0000)
svn path=/main/trunk/; revision=6750

pym/emerge/__init__.py
pym/portage/__init__.py
pym/portage/dep.py

index 0db3862f30129be02a4f11949246630c722f76ba..f76924723f5984c2ec4867c63dfcbb729059ff10 100644 (file)
@@ -2450,6 +2450,8 @@ class depgraph:
                                depth >= mylist[i+1][1]:
                                        del mylist[i]
 
+               from portage import flatten
+               from portage.dep import use_reduce, paren_reduce
                display_overlays=False
                # files to fetch list - avoids counting a same file twice
                # in size display (verbose mode)
@@ -2508,9 +2510,17 @@ class depgraph:
                                        self.useFlags[myroot][pkg_key] = mydbapi.aux_get(
                                                pkg_key, ["USE"])[0].split()
 
+                               try:
+                                       restrict = flatten(use_reduce(paren_reduce(
+                                               mydbapi.aux_get(pkg_key, ["RESTRICT"])[0]),
+                                               uselist=self.useFlags[myroot][pkg_key]))
+                               except portage.exception.InvalidDependString, e:
+                                       restrict = mydbapi.aux_get(pkg_key, ["RESTRICT"])[0]
+                                       show_invalid_depstring_notice(x, restrict, str(e))
+                                       del e
+                                       sys.exit(1)
                                if "ebuild" == pkg_type and x[3] != "nomerge" and \
-                                       "fetch" in portdb.aux_get(
-                                       x[2], ["RESTRICT"])[0].split():
+                                       "fetch" in restrict:
                                        fetch = red("F")
                                        if ordered:
                                                counters.restrict_fetch += 1
index b6fbf2cade71aff272701162c80c0c60dbf2fb73..4c6a9ce0d3fb61bae9f19fa0f4cf9c8f7d826edf 100644 (file)
@@ -2354,7 +2354,7 @@ def spawn(mystring, mysettings, debug=0, free=0, droppriv=0, sesandbox=0, **keyw
                keywords["fd_pipes"] = fd_pipes
 
        features = mysettings.features
-       restrict = mysettings.get("RESTRICT", "").split()
+       restrict = mysettings.get("PORTAGE_RESTRICT","").split()
        droppriv=(droppriv and "userpriv" in features and not \
                ("nouserpriv" in restrict or "userpriv" in restrict))
        if droppriv and not uid and portage_gid and portage_uid:
@@ -2421,9 +2421,10 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
        "fetch files.  Will use digest file if available."
 
        features = mysettings.features
+       restrict = mysettings.get("PORTAGE_RESTRICT","").split()
        # 'nomirror' is bad/negative logic. You Restrict mirroring, not no-mirroring.
-       if ("mirror" in mysettings["RESTRICT"].split()) or \
-          ("nomirror" in mysettings["RESTRICT"].split()):
+       if "mirror" in restrict or \
+          "nomirror" in restrict:
                if ("mirror" in features) and ("lmirror" not in features):
                        # lmirror should allow you to bypass mirror restrictions.
                        # XXX: This is not a good thing, and is temporary at best.
@@ -2458,8 +2459,8 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
        if custommirrors.has_key("local"):
                mymirrors += custommirrors["local"]
 
-       if ("nomirror" in mysettings["RESTRICT"].split()) or \
-          ("mirror"   in mysettings["RESTRICT"].split()):
+       if "nomirror" in restrict or \
+          "mirror" in restrict:
                # We don't add any mirrors.
                pass
        else:
@@ -2480,7 +2481,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                        fsmirrors += [mymirrors[x]]
                        del mymirrors[x]
 
-       restrict_fetch = "fetch" in mysettings["RESTRICT"].split()
+       restrict_fetch = "fetch" in restrict
        custom_local_mirrors = custommirrors.get("local", [])
        if restrict_fetch:
                # With fetch restriction, a normal uri may only be fetched from
@@ -2527,7 +2528,7 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
                        if restrict_fetch:
                                # Only fetch from specific mirrors is allowed.
                                continue
-                       if "primaryuri" in mysettings["RESTRICT"].split():
+                       if "primaryuri" in restrict:
                                # Use the source site first.
                                if primaryuri_indexes.has_key(myfile):
                                        primaryuri_indexes[myfile] += 1
@@ -3845,13 +3846,14 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
 
                #initial dep checks complete; time to process main commands
 
+               restrict = mysettings["PORTAGE_RESTRICT"].split()
                nosandbox = (("userpriv" in features) and \
                        ("usersandbox" not in features) and \
-                       ("userpriv" not in mysettings["RESTRICT"]) and \
-                       ("nouserpriv" not in mysettings["RESTRICT"]))
+                       "userpriv" not in restrict and \
+                       "nouserpriv" not in restrict)
                if nosandbox and ("userpriv" not in features or \
-                       "userpriv" in mysettings["RESTRICT"] or \
-                       "nouserpriv" in mysettings["RESTRICT"]):
+                       "userpriv" in restrict or \
+                       "nouserpriv" in restrict):
                        nosandbox = ("sandbox" not in features and \
                                "usersandbox" not in features)
 
index 445d804e00c09d1ba5eae4e767197bdd010fac54..9474c1f25e7b6fb645152b478d54779a0ccc031c 100644 (file)
@@ -263,7 +263,7 @@ def use_reduce(deparray, uselist=[], masklist=[], matchall=0, excludeall=[]):
                                        else:
                                                ismatch = False
                                if missing_flag:
-                                       raise portage_exception.InvalidDependString(
+                                       raise portage.exception.InvalidDependString(
                                                "Conditional without flag: \"" + \
                                                paren_enclose([head+"?", newdeparray[-1]])+"\"")