summaryrefslogtreecommitdiffstats
path: root/pym/portage/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'pym/portage/__init__.py')
-rw-r--r--pym/portage/__init__.py86
1 files changed, 42 insertions, 44 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index a8a7ea561..b99805d0b 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -5062,7 +5062,7 @@ def cpv_expand(mycpv, mydb=None, use_cache=1, settings=None):
else:
return mykey
-def getmaskingreason(mycpv, settings=None, portdb=None, return_location=False):
+def getmaskingreason(mycpv, metadata=None, settings=None, portdb=None, return_location=False):
from portage.util import grablines
if settings is None:
settings = globals()["settings"]
@@ -5071,8 +5071,18 @@ def getmaskingreason(mycpv, settings=None, portdb=None, return_location=False):
mysplit = catpkgsplit(mycpv)
if not mysplit:
raise ValueError("invalid CPV: %s" % mycpv)
- if not portdb.cpv_exists(mycpv):
- raise KeyError("CPV %s does not exist" % mycpv)
+ if metadata is None:
+ db_keys = list(portdb._aux_cache_keys)
+ try:
+ metadata = dict(izip(db_keys, portdb.aux_get(mycpv, db_keys)))
+ except KeyError:
+ if not portdb.cpv_exists(mycpv):
+ raise
+ if metadata is None:
+ # Can't access SLOT due to corruption.
+ cpv_slot_list = [mycpv]
+ else:
+ cpv_slot_list = ["%s:%s" % (mycpv, metadata["SLOT"])]
mycp=mysplit[0]+"/"+mysplit[1]
# XXX- This is a temporary duplicate of code from the config constructor.
@@ -5089,7 +5099,7 @@ def getmaskingreason(mycpv, settings=None, portdb=None, return_location=False):
if settings.pmaskdict.has_key(mycp):
for x in settings.pmaskdict[mycp]:
- if mycpv in portdb.xmatch("match-all", x):
+ if match_from_list(x, cpv_slot_list):
comment = ""
l = "\n"
comment_valid = -1
@@ -5119,7 +5129,7 @@ def getmaskingreason(mycpv, settings=None, portdb=None, return_location=False):
else:
return None
-def getmaskingstatus(mycpv, settings=None, portdb=None):
+def getmaskingstatus(mycpv, metadata=None, settings=None, portdb=None):
if settings is None:
settings = config(clone=globals()["settings"])
if portdb is None:
@@ -5127,47 +5137,37 @@ def getmaskingstatus(mycpv, settings=None, portdb=None):
mysplit = catpkgsplit(mycpv)
if not mysplit:
raise ValueError("invalid CPV: %s" % mycpv)
- if not portdb.cpv_exists(mycpv):
- raise KeyError("CPV %s does not exist" % mycpv)
+ if metadata is None:
+ db_keys = list(portdb._aux_cache_keys)
+ try:
+ metadata = dict(izip(db_keys, portdb.aux_get(mycpv, db_keys)))
+ except KeyError:
+ if not portdb.cpv_exists(mycpv):
+ raise
+ return ["corruption"]
+ if "?" in metadata["LICENSE"]:
+ settings.setcpv(p, mydb=metadata)
+ metadata["USE"] = settings.get("USE", "")
+ else:
+ metadata["USE"] = ""
+ cpv_slot_list = ["%s:%s" % (mycpv, metadata["SLOT"])]
mycp=mysplit[0]+"/"+mysplit[1]
rValue = []
# profile checking
- revmaskdict=settings.prevmaskdict
- if revmaskdict.has_key(mycp):
- for x in revmaskdict[mycp]:
- if x[0]=="*":
- myatom = x[1:]
- else:
- myatom = x
- if not match_to_list(mycpv, [myatom]):
- rValue.append("profile")
- break
+ if settings.getProfileMaskAtom(mycpv, metadata):
+ rValue.append("profile")
# package.mask checking
- maskdict=settings.pmaskdict
- unmaskdict=settings.punmaskdict
- if maskdict.has_key(mycp):
- for x in maskdict[mycp]:
- if mycpv in portdb.xmatch("match-all", x):
- unmask=0
- if unmaskdict.has_key(mycp):
- for z in unmaskdict[mycp]:
- if mycpv in portdb.xmatch("match-all",z):
- unmask=1
- break
- if unmask==0:
- rValue.append("package.mask")
+ if settings.getMaskAtom(mycpv, metadata):
+ rValue.append("package.mask")
# keywords checking
- try:
- eapi, mygroups, licenses, slot = portdb.aux_get(
- mycpv, ["EAPI", "KEYWORDS", "LICENSE", "SLOT"])
- except KeyError:
- # The "depend" phase apparently failed for some reason. An associated
- # error message will have already been printed to stderr.
- return ["corruption"]
+ eapi = metadata["EAPI"]
+ mygroups = metadata["KEYWORDS"]
+ licenses = metadata["LICENSE"]
+ slot = metadata["SLOT"]
if eapi.startswith("-"):
eapi = eapi[1:]
if not eapi_is_supported(eapi):
@@ -5183,7 +5183,10 @@ def getmaskingstatus(mycpv, settings=None, portdb=None):
cp = dep_getkey(mycpv)
if pkgdict.has_key(cp):
- matches = match_to_list(mycpv, pkgdict[cp].keys())
+ matches = []
+ for match in pkgdict[cp]:
+ if match_from_list(match, cpv_slot_list):
+ matches.append(match)
for match in matches:
pgroups.extend(pkgdict[cp][match])
if matches:
@@ -5223,13 +5226,8 @@ def getmaskingstatus(mycpv, settings=None, portdb=None):
if kmask:
rValue.append(kmask+" keyword")
- use = ""
- if "?" in licenses:
- settings.setcpv(mycpv, mydb=portdb)
- use = settings.get("USE", "")
try:
- missing_licenses = settings.getMissingLicenses(
- mycpv, {"LICENSE":licenses, "SLOT":slot, "USE":use})
+ missing_licenses = settings.getMissingLicenses(mycpv, metadata)
if missing_licenses:
allowed_tokens = set(["||", "(", ")"])
allowed_tokens.update(missing_licenses)