summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/__init__.py57
1 files changed, 30 insertions, 27 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 43eaa4300..f29ee509e 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -472,8 +472,14 @@ class search(object):
def _visible(self, db, cpv, metadata):
installed = db is self.vartree.dbapi
built = installed or db is not self._portdb
- return visible(self.settings, cpv, metadata,
- built=built, installed=installed)
+ pkg_type = "ebuild"
+ if installed:
+ pkg_type = "installed"
+ elif built:
+ pkg_type = "binary"
+ return visible(self.settings,
+ Package(type_name=pkg_type, root=self.settings["ROOT"],
+ cpv=cpv, built=built, installed=installed, metadata=metadata))
def _xmatch(self, level, atom):
"""
@@ -1052,7 +1058,7 @@ def perform_global_updates(mycpv, mydb, mycommands):
if updates:
mydb.aux_update(mycpv, updates)
-def visible(pkgsettings, cpv, metadata, built=False, installed=False):
+def visible(pkgsettings, pkg):
"""
Check if a package is visible. This can raise an InvalidDependString
exception if LICENSE is invalid.
@@ -1060,20 +1066,24 @@ def visible(pkgsettings, cpv, metadata, built=False, installed=False):
@rtype: Boolean
@returns: True if the package is visible, False otherwise.
"""
- if not metadata["SLOT"]:
+ if not pkg.metadata["SLOT"]:
return False
- if built and not installed and \
- metadata["CHOST"] != pkgsettings["CHOST"]:
+ if pkg.built and not pkg.installed and \
+ pkg.metadata["CHOST"] != pkgsettings["CHOST"]:
return False
- if not portage.eapi_is_supported(metadata["EAPI"]):
+ if not portage.eapi_is_supported(pkg.metadata["EAPI"]):
return False
- if not installed and pkgsettings.getMissingKeywords(cpv, metadata):
+ if not pkg.installed and \
+ pkgsettings.getMissingKeywords(pkg.cpv, pkg.metadata):
return False
- if pkgsettings.getMaskAtom(cpv, metadata):
+ if pkgsettings.getMaskAtom(pkg.cpv, pkg.metadata):
return False
- if pkgsettings.getProfileMaskAtom(cpv, metadata):
+ if pkgsettings.getProfileMaskAtom(pkg.cpv, pkg.metadata):
return False
- if pkgsettings.getMissingLicenses(cpv, metadata):
+ try:
+ if pkgsettings.getMissingLicenses(pkg.cpv, pkg.metadata):
+ return False
+ except portage.exception.InvalidDependString:
return False
return True
@@ -1840,8 +1850,7 @@ class depgraph(object):
if all_ebuilds_masked and not selective:
self._missing_args.append((arg, atom))
- if not visible(pkgsettings, pkg.cpv, pkg.metadata,
- built=pkg.built, installed=pkg.installed):
+ if not visible(pkgsettings, pkg):
self._masked_installed.append((pkg, pkgsettings))
if args:
@@ -2422,12 +2431,9 @@ class depgraph(object):
else:
metadata["USE"] = ""
- try:
- if not visible(pkgsettings, cpv, metadata,
- built=built, installed=installed):
- continue
- except portage.exception.InvalidDependString:
- # masked by corruption
+ if not visible(pkgsettings, Package(built=built,
+ cpv=cpv, root=myroot, type_name=pkg_type,
+ installed=installed, metadata=metadata)):
continue
filtered_db.cpv_inject(cpv, metadata=metadata)
@@ -2631,12 +2637,9 @@ class depgraph(object):
if not installed:
if myarg:
found_available_arg = True
- try:
- if not visible(pkgsettings, cpv, metadata,
- built=built, installed=installed):
- continue
- except portage.exception.InvalidDependString:
- # masked by corruption
+ if not visible(pkgsettings, Package(built=built,
+ cpv=cpv, installed=installed, metadata=metadata,
+ type_name=pkg_type)):
continue
# At this point, we've found the highest visible
# match from the current repo. Any lower versions
@@ -6558,8 +6561,8 @@ def action_depclean(settings, trees, ldpath_mtimes,
for cpv in reversed(pkgs):
metadata = dict(izip(metadata_keys,
vardb.aux_get(cpv, metadata_keys)))
- if visible(settings, cpv, metadata,
- built=True, installed=True):
+ if visible(settings, Package(built=True, cpv=cpv,
+ installed=True, metadata=metadata, type_name="installed")):
pkgs = [cpv]
break
if len(pkgs) > 1: