From 39cf62d1eb6724fb2269807ca0e6ac232e8a4878 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Tue, 23 Dec 2008 07:02:00 +0000 Subject: Bug #252167 - If the ebuild no longer exists or it's keywords have been dropped, reject built instances (installed or binary). If --usepkgonly is enabled, assume that the ebuild status should be ignored. svn path=/main/trunk/; revision=12278 --- pym/_emerge/__init__.py | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 348b2c20b..874e12ac2 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -5829,7 +5829,7 @@ class depgraph(object): calculated_use = True self._pkg_cache[pkg] = pkg - if not installed or (installed and matched_packages): + if not installed or (built and matched_packages): # Only enforce visibility on installed packages # if there is at least one other visible package # available. By filtering installed masked packages @@ -5848,9 +5848,8 @@ class depgraph(object): # version is masked by KEYWORDS, but never # reinstall the same exact version only due # to a KEYWORDS mask. - if installed and matched_packages and \ - pkgsettings._getMissingKeywords( - pkg.cpv, pkg.metadata): + if built and matched_packages: + different_version = None for avail_pkg in matched_packages: if not portage.dep.cpvequal( @@ -5858,9 +5857,26 @@ class depgraph(object): different_version = avail_pkg break if different_version is not None: - # Only reinstall for KEYWORDS if - # it's not the same version. - continue + + if installed and \ + pkgsettings._getMissingKeywords( + pkg.cpv, pkg.metadata): + continue + + # If the ebuild no longer exists or it's + # keywords have been dropped, reject built + # instances (installed or binary). + # If --usepkgonly is enabled, assume that + # the ebuild status should be ignored. + if not usepkgonly: + try: + pkg_eb = self._pkg( + pkg.cpv, "ebuild", root_config) + except portage.exception.PackageNotFound: + continue + else: + if not visible(pkgsettings, pkg_eb): + continue if not pkg.built and not calculated_use: # This is avoided whenever possible because @@ -6149,7 +6165,10 @@ class depgraph(object): db = root_config.trees[tree_type].dbapi db_keys = list(self._trees_orig[root_config.root][ tree_type].dbapi._aux_cache_keys) - metadata = izip(db_keys, db.aux_get(cpv, db_keys)) + try: + metadata = izip(db_keys, db.aux_get(cpv, db_keys)) + except KeyError: + raise portage.exception.PackageNotFound(cpv) pkg = Package(cpv=cpv, metadata=metadata, root_config=root_config, installed=installed) if type_name == "ebuild": -- cgit v1.2.3-1-g7c22