From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 254F81389E2 for ; Thu, 11 Dec 2014 08:34:17 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 61E13E0B06; Thu, 11 Dec 2014 08:34:14 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id D84A7E0B03 for ; Thu, 11 Dec 2014 08:34:13 +0000 (UTC) Received: from x200ma.gaikai.int (ip70-181-96-121.oc.oc.cox.net [70.181.96.121]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: zmedico) by smtp.gentoo.org (Postfix) with ESMTPSA id C495534001A; Thu, 11 Dec 2014 08:34:12 +0000 (UTC) From: Zac Medico To: gentoo-portage-dev@lists.gentoo.org Cc: Zac Medico Subject: [gentoo-portage-dev] [PATCH v2] search._xmatch: handle aux_get KeyError (525718) Date: Thu, 11 Dec 2014 00:33:41 -0800 Message-Id: <1418286821-18908-1-git-send-email-zmedico@gentoo.org> X-Mailer: git-send-email 2.0.4 In-Reply-To: <1418284304-10683-1-git-send-email-zmedico@gentoo.org> References: <1418284304-10683-1-git-send-email-zmedico@gentoo.org> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-portage-dev@lists.gentoo.org Reply-to: gentoo-portage-dev@lists.gentoo.org X-Archives-Salt: 2d48b053-532a-4b50-9549-32c68781756d X-Archives-Hash: 84bfe5c61239b5e9e1261e6cb786fb38 Since commit 55c8c8bc7a781e3f71ce92922eea64ad4cafce3c, emerge --search can raise an unhandled KeyError if a pkg_desc_index contains a stale package. Handle it with the same error message used for other aux_get failures. Fixes: 55c8c8bc7a78 ("Add emerge --search-index option.") X-Gentoo-Bug: 525718 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=525718 --- PATCH v2 splits out a _aux_get_error method to unify the error output formatting. pym/_emerge/search.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/pym/_emerge/search.py b/pym/_emerge/search.py index 90dbcec..e7f6f44 100644 --- a/pym/_emerge/search.py +++ b/pym/_emerge/search.py @@ -1,6 +1,8 @@ # Copyright 1999-2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 +from __future__ import unicode_literals + import re import portage from portage import os @@ -86,6 +88,11 @@ class search(object): pass raise KeyError(args[0]) + def _aux_get_error(self, cpv): + portage.writemsg("emerge: search: " + "aux_get('%s') failed, skipping\n" % cpv, + noiselevel=-1) + def _findname(self, *args, **kwargs): for db in self._dbs: if db is not self._portdb: @@ -166,8 +173,12 @@ class search(object): else: db_keys = list(db._aux_cache_keys) for cpv in db.match(atom): - metadata = zip(db_keys, - db.aux_get(cpv, db_keys)) + try: + metadata = zip(db_keys, + db.aux_get(cpv, db_keys)) + except KeyError: + self._aux_get_error(cpv) + continue if not self._visible(db, cpv, metadata): continue matches.add(cpv) @@ -197,8 +208,12 @@ class search(object): for cpv in reversed(matches): if portage.cpv_getkey(cpv) != cp: continue - metadata = zip(db_keys, - db.aux_get(cpv, db_keys)) + try: + metadata = zip(db_keys, + db.aux_get(cpv, db_keys)) + except KeyError: + self._aux_get_error(cpv) + continue if not self._visible(db, cpv, metadata): continue if not result or cpv == portage.best([cpv, result]): @@ -257,9 +272,7 @@ class search(object): full_desc = self._aux_get( full_package, ["DESCRIPTION"])[0] except KeyError: - portage.writemsg( - "emerge: search: aux_get() failed, skipping\n", - noiselevel=-1) + self._aux_get_error(full_package) continue if not self.searchre.search(full_desc): continue @@ -337,7 +350,7 @@ class search(object): metadata = dict(zip(metadata_keys, self._aux_get(full_package, metadata_keys))) except KeyError: - msg.append("emerge: search: aux_get() failed, skipping\n") + self._aux_get_error(full_package) continue desc = metadata["DESCRIPTION"] -- 2.0.4