Bug #194764 - All the match* functions can raise
authorZac Medico <zmedico@gentoo.org>
Fri, 5 Oct 2007 04:20:56 +0000 (04:20 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 5 Oct 2007 04:20:56 +0000 (04:20 -0000)
a ValueError if cpv_expand() receives an ambiguous
atom. Therefore, move the ValueError handling code
out of match() and use it to handle all such errors
when appropriate. (trunk r7944)

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

bin/portageq

index 6147e5627f7832eb7435d7000e11685821828c8a..4b9ad94731a9cf7d3dbde72fbe485a101946d1b9 100755 (executable)
@@ -184,15 +184,6 @@ def match(argv):
                sys.exit(2)
        try:
                print "\n".join(portage.db[argv[0]]["vartree"].dbapi.match(argv[1]))
-       except ValueError, e:
-               # Multiple matches thrown from cpv_expand
-               pkgs = e.args[0]
-               # An error has occurred so we writemsg to stderr and exit nonzero.
-               portage.writemsg("The following packages available:\n", noiselevel=-1)
-               for pkg in pkgs:
-                       portage.writemsg("* %s\n" % pkg, noiselevel=-1)
-               portage.writemsg("\nPlease use a more specific atom.\n", noiselevel=-1)
-               sys.exit(1)
        except KeyError, e:
                portage.writemsg("%s\n" % str(e), noiselevel=-1)
                sys.exit(1)
@@ -350,6 +341,19 @@ def main():
        except portage_exception.PermissionDenied, e:
                sys.stderr.write("Permission denied: '%s'\n" % str(e))
                sys.exit(e.errno)
+       except ValueError, e:
+               if not e.args or \
+                       not hasattr(e.args[0], "__len__") or \
+                       len(e.args[0]) < 2:
+                       raise
+               # Multiple matches thrown from cpv_expand
+               pkgs = e.args[0]
+               # An error has occurred so we writemsg to stderr and exit nonzero.
+               portage.writemsg("The following packages available:\n", noiselevel=-1)
+               for pkg in pkgs:
+                       portage.writemsg("* %s\n" % pkg, noiselevel=-1)
+               portage.writemsg("\nPlease use a more specific atom.\n", noiselevel=-1)
+               sys.exit(1)
 
 main()