From 3e2dfe7cecbf79102895d862b439250c2ba8da43 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 28 Apr 2008 22:22:52 +0000 Subject: Handle a potential KeyError in depgraph.display() when in --resume mode and a package scheduled for uninstall is no longer installed. svn path=/main/trunk/; revision=10032 --- pym/_emerge/__init__.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'pym') diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py index 616a4fb69..2ed6474ce 100644 --- a/pym/_emerge/__init__.py +++ b/pym/_emerge/__init__.py @@ -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 -- cgit v1.2.3-1-g7c22