Wrong flag (I am not familiar with hg email yet), please ignore.

My apologies.


Le 01/09/2017 à 09:43, Christophe de Vienne a écrit :
> # HG changeset patch
> # User Christophe de Vienne <christo...@cdevienne.info>
> # Date 1504023891 -7200
> #      Tue Aug 29 18:24:51 2017 +0200
> # Node ID 06bc5adebc48cfb657cdefda41704a96f686fae7
> # Parent  b2eb0aa445cbe7cadc8b7691c6266908adfc5057
> command options: abort on unicode defaults
> 
> If the default value of an option is a unicode string (something
> than happen easily when using a 'from __future__ import unicode_literals'),
> any value passed on the command line will be ignored because the fancyopts
> module only checks for byte strings and not unicode strings.
> 
> Changing fancyopts behavior is easy but would make assumptions on how
> the python3 port should be done, which is outside the scope of this patch.
> 
> The chosen approach is to abort when a unicode default value is detected,
> with a hint for the developer.
> 
> diff -r b2eb0aa445cb -r 06bc5adebc48 mercurial/dispatch.py
> --- a/mercurial/dispatch.py   Tue Aug 22 21:21:43 2017 -0400
> +++ b/mercurial/dispatch.py   Tue Aug 29 18:24:51 2017 +0200
> @@ -558,6 +558,14 @@
>              args = pycompat.maplist(
>                  util.expandpath, pycompat.shlexsplit(defaults)) + args
>          c = list(entry[1])
> +        for option in entry[1]:
> +            default = option[2]
> +            if not pycompat.ispy3 and isinstance(default, type(u'')):
> +                raise error.Abort(
> +                    "A unicode default value (%s) was passed to the "
> +                    "%s.%s option" % (repr(default), cmd, option[1]),
> +                    "You should change the %s.%s default value to a "
> +                    "non-unicode string" % (cmd, option[1]))
>      else:
>          cmd = None
>          c = []
> diff -r b2eb0aa445cb -r 06bc5adebc48 tests/test-dispatch.t
> --- a/tests/test-dispatch.t   Tue Aug 22 21:21:43 2017 -0400
> +++ b/tests/test-dispatch.t   Tue Aug 29 18:24:51 2017 +0200
> @@ -60,3 +60,23 @@
>    [255]
>  
>  #endif
> +
> +Test abort on command options with unicode default value
> +
> +  $ hg init $TESTTMP/opt-unicode-default
> +
> +  $ cat > $TESTTMP/test_unicode_default_value.py << EOF
> +  > from mercurial import registrar
> +  > cmdtable = {}
> +  > command = registrar.command(cmdtable)
> +  > @command('ext', [('', 'opt', u'value', u'help')], 'ext [OPTIONS]')
> +  > def ext(*args, **opts):
> +  >     print(opts['opt'])
> +  > EOF
> +  $ cat > $TESTTMP/opt-unicode-default/.hg/hgrc << EOF
> +  > [extensions]
> +  > test_unicode_default_value = $TESTTMP/test_unicode_default_value.py
> +  > EOF
> +  $ hg -R $TESTTMP/opt-unicode-default ext
> +  abort: ("A unicode default value (u'value') was passed to the ext.opt 
> option", 'You should change the ext.opt default value to a non-unicode 
> string')
> +  [255]
> 

-- 
Christophe de Vienne
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to