Handle a potential KeyError in depgraph.display() when in --resume mode
authorZac Medico <zmedico@gentoo.org>
Mon, 28 Apr 2008 22:22:52 +0000 (22:22 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 28 Apr 2008 22:22:52 +0000 (22:22 -0000)
and a package scheduled for uninstall is no longer installed.

svn path=/main/trunk/; revision=10032

pym/_emerge/__init__.py

index 616a4fb69d30a119ceab2273ca6187c37b6e9c0a..2ed6474cee0dfea74847450c4e41259f91565e7c 100644 (file)
@@ -4044,16 +4044,27 @@ class depgraph(object):
                                else:
                                        blockers.append(addl)
                        else:
-                               pkg = self._pkg_cache[tuple(x)]
-                               metadata = pkg.metadata
                                pkg_status = x[3]
                                pkg_merge = ordered and pkg_status == "merge"
                                if not pkg_merge and pkg_status == "merge":
                                        pkg_status = "nomerge"
-                               ebuild_path = None
-                               repo_name = metadata["repository"]
                                built = pkg_type != "ebuild"
                                installed = pkg_type == "installed"
+                               try:
+                                       pkg = self._pkg_cache[tuple(x)]
+                               except KeyError:
+                                       if pkg_status != "uninstall":
+                                               raise
+                                       # A package scheduled for uninstall apparently
+                                       # isn't installed anymore. Since it's already
+                                       # been uninstalled, move on to the next task.
+                                       # This case should only be reachable in --resume
+                                       # mode, since otherwise the package would have
+                                       # been cached.
+                                       continue
+                               metadata = pkg.metadata
+                               ebuild_path = None
+                               repo_name = metadata["repository"]
                                if pkg_type == "ebuild":
                                        ebuild_path = portdb.findname(pkg_key)
                                        if not ebuild_path: # shouldn't happen