Bug #252167 - If the ebuild no longer exists or it's keywords have been dropped,
authorZac Medico <zmedico@gentoo.org>
Tue, 23 Dec 2008 07:02:00 +0000 (07:02 -0000)
committerZac Medico <zmedico@gentoo.org>
Tue, 23 Dec 2008 07:02:00 +0000 (07:02 -0000)
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

index 348b2c20bac0a6b8d8b0ea2968c6a7c500b310f4..874e12ac287cdd32d38fcf071e53b0d236b1cbc2 100644 (file)
@@ -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":