fancyopts: don't show a traceback on invalid integer values
authorIdan Kamara <idankk86@gmail.com>
Mon, 08 Oct 2012 15:35:16 +0200
changeset 17712 c4717f44c1f1
parent 17711 cf204e9829f4
child 17713 2c6382772db0
fancyopts: don't show a traceback on invalid integer values
mercurial/fancyopts.py
tests/test-import.t
--- a/mercurial/fancyopts.py	Wed Oct 03 22:09:18 2012 +0200
+++ b/mercurial/fancyopts.py	Mon Oct 08 15:35:16 2012 +0200
@@ -5,7 +5,8 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2 or any later version.
 
-import getopt
+import getopt, util
+from i18n import _
 
 def gnugetopt(args, options, longoptions):
     """Parse options mostly like getopt.gnu_getopt.
@@ -105,7 +106,11 @@
         if t is type(fancyopts):
             state[name] = defmap[name](val)
         elif t is type(1):
-            state[name] = int(val)
+            try:
+                state[name] = int(val)
+            except ValueError:
+                raise util.Abort(_('invalid value %r for option %s, '
+                                   'expected int') % (val, opt))
         elif t is type(''):
             state[name] = val
         elif t is type([]):
--- a/tests/test-import.t	Wed Oct 03 22:09:18 2012 +0200
+++ b/tests/test-import.t	Mon Oct 08 15:35:16 2012 +0200
@@ -602,6 +602,9 @@
   $ echo a > a
   $ hg ci -Am t
   adding a
+  $ hg import -p foo
+  abort: invalid value 'foo' for option -p, expected int
+  [255]
   $ hg import -p0 - << EOF
   > foobar
   > --- a	Sat Apr 12 22:43:58 2008 -0400