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

svn path=/main/branches/2.1.2/; revision=10033

bin/emerge

index 20bb8dd7eeed0f5225799cb6ba5ab33cd7f7e74f..34b57fde37bcaf135b315ffa5c811eb6da031c3a 100755 (executable)
@@ -4191,16 +4191,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