From 8809ebf154b61bfa600c671a525399f1bfa4bcba Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 11 Jun 2008 09:06:54 +0000 Subject: Bug #225767 - Suppress warnings for installed packages masked by keywords if there is an equivalent ebuild in the portage tree (same cpv) with visible keywords. svn path=/main/trunk/; revision=10644 --- pym/_emerge/__init__.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 539a9235a..63a0f34d1 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -3440,6 +3440,32 @@ class depgraph(object): return 0 return 1 + def _pkg(self, cpv, type_name, root_config, installed=False): + """ + Get a package instance from the cache, or create a new + one if necessary. Raises KeyError from aux_get if it + failures for some reason (package does not exist or is + corrupt). + """ + operation = "merge" + if installed: + operation = "nomerge" + pkg = self._pkg_cache.get( + (type_name, root_config.root, cpv, operation)) + if pkg is None: + db = root_config.trees[ + self.pkg_tree_map[type_name]].dbapi + metadata = izip(Package.metadata_keys, + db.aux_get(cpv, Package.metadata_keys)) + pkg = Package(cpv=cpv, metadata=metadata, + root_config=root_config) + if type_name == "ebuild": + settings = self.pkgsettings[root_config.root] + settings.setcpv(pkg) + pkg.metadata["USE"] = settings["PORTAGE_USE"] + self._pkg_cache[pkg] = pkg + return pkg + def validate_blockers(self): """Remove any blockers from the digraph that do not match any of the packages within the graph. If necessary, create hard deps to ensure @@ -3507,7 +3533,14 @@ class depgraph(object): pkg.cpv, pkg.metadata) and \ pkg.metadata["KEYWORDS"].split() and \ not pkg_in_graph: - self._masked_installed.add(pkg) + try: + ebuild = self._pkg(pkg.cpv, + "ebuild", pkg.root_config) + except KeyError: + ebuild = None + if ebuild is None or \ + not visible(pkgsettings, ebuild): + self._masked_installed.add(pkg) blocker_atoms = None blockers = None -- cgit v1.2.3-1-g7c22