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