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
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
+ else:
+ try:
+ if not visible(pkgsettings, ebuild):
+ ebuild = None
+ except portage_exception.InvalidDependString:
+ ebuild = None
+ if ebuild is None:
+ self._masked_installed.add(pkg)
blocker_atoms = None
blockers = None