summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-12-20 11:17:41 +0000
committerZac Medico <zmedico@gentoo.org>2007-12-20 11:17:41 +0000
commitdb458e6f62d7d4c66562b824900c262e3015948d (patch)
tree87e4fd3981c42e5e04d829364150f917ed9a611e /bin
parent0a0188d22823d494220af5a65d37ce0003a78145 (diff)
downloadportage-db458e6f62d7d4c66562b824900c262e3015948d.tar.gz
portage-db458e6f62d7d4c66562b824900c262e3015948d.tar.bz2
portage-db458e6f62d7d4c66562b824900c262e3015948d.zip
Bug #149816 - Implement visibility filtering for binary packages.
This is only the least invasive part of the implementation that is currently in trunk. svn path=/main/branches/2.1.2/; revision=8984
Diffstat (limited to 'bin')
-rwxr-xr-xbin/emerge35
1 files changed, 24 insertions, 11 deletions
diff --git a/bin/emerge b/bin/emerge
index 3759de185..3240d79ab 100755
--- a/bin/emerge
+++ b/bin/emerge
@@ -1045,6 +1045,29 @@ def perform_global_updates(mycpv, mydb, mycommands):
if updates:
mydb.aux_update(mycpv, updates)
+def visible(pkgsettings, cpv, metadata, built=False, installed=False):
+ """
+ Check if a package is visible. This can raise an InvalidDependString
+ exception if LICENSE is invalid.
+ TODO: optionally generate a list of masking reasons
+ @rtype: Boolean
+ @returns: True if the package is visible, False otherwise.
+ """
+ if not metadata["SLOT"]:
+ return False
+ if built and not installed and \
+ metadata["CHOST"] != pkgsettings["CHOST"]:
+ return False
+ if not portage.eapi_is_supported(metadata["EAPI"]):
+ return False
+ if pkgsettings._getMissingKeywords(cpv, metadata):
+ return False
+ if pkgsettings._getMaskAtom(cpv, metadata):
+ return False
+ if pkgsettings._getProfileMaskAtom(cpv, metadata):
+ return False
+ return True
+
class BlockerCache(DictMixin):
"""This caches blockers of installed packages so that dep_check does not
have to be done for every single installed package on every invocation of
@@ -1975,17 +1998,7 @@ class depgraph:
for pkg in bindb.match(x):
metadata = dict(izip(bindb_keys,
bindb.aux_get(pkg, bindb_keys)))
- if not metadata["SLOT"]:
- continue
- if chost != metadata["CHOST"]:
- continue
- if not portage.eapi_is_supported(metadata["EAPI"]):
- continue
- # Remove any binary package entries that are
- # masked in the portage tree (#55871).
- if not usepkgonly and \
- not (pkg in myeb_matches or \
- not portdb.cpv_exists(pkg)):
+ if not visible(pkgsettings, pkg, metadata, built=True):
continue
myeb_pkg_matches.append(pkg)
if myeb_pkg_matches: