From d8cbd2f92c83461e37d20b3416c54beb1b5c985f Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 7 Jun 2007 18:57:04 +0000 Subject: Make all the python code respect USE conditionals in RESTRICT. It's already handled on the bash side since RESTRICT is assigned the value of PORTAGE_RESTRICT. svn path=/main/trunk/; revision=6750 --- pym/emerge/__init__.py | 14 ++++++++++++-- pym/portage/__init__.py | 24 +++++++++++++----------- pym/portage/dep.py | 2 +- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/pym/emerge/__init__.py b/pym/emerge/__init__.py index 0db3862f3..f76924723 100644 --- a/pym/emerge/__init__.py +++ b/pym/emerge/__init__.py @@ -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 diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index b6fbf2cad..4c6a9ce0d 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -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) diff --git a/pym/portage/dep.py b/pym/portage/dep.py index 445d804e0..9474c1f25 100644 --- a/pym/portage/dep.py +++ b/pym/portage/dep.py @@ -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]])+"\"") -- cgit v1.2.3-1-g7c22