From db458e6f62d7d4c66562b824900c262e3015948d Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Thu, 20 Dec 2007 11:17:41 +0000 Subject: 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 --- bin/emerge | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'bin') 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: -- cgit v1.2.3-1-g7c22