[PATCH v2] command options: abort on unicode defaults
Christophe de Vienne
christophe at cdevienne.info
Fri Sep 1 07:31:14 UTC 2017
Le 31/08/2017 à 23:50, Jun Wu a écrit :
> Excerpts from Christophe de Vienne's message of 2017-08-31 23:26:58 +0200:
>> # HG changeset patch
>> # User Christophe de Vienne <christophe at cdevienne.info>
>> # Date 1504023891 -7200
>> # Tue Aug 29 18:24:51 2017 +0200
>> # Node ID 5bbb2d585a963985a9172325f98bb5367b53e438
>> # 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 abord when a unicode default value is detected,
>
> "abort"
Thanks
>
>> with a hint for the developer.
>>
>> diff -r b2eb0aa445cb -r 5bbb2d585a96 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
>> @@ -557,7 +557,15 @@
>> if defaults:
>> args = pycompat.maplist(
>> util.expandpath, pycompat.shlexsplit(defaults)) + args
>> - c = list(entry[1])
>
> Changing here means it only works for global opts. Is that intentional?
no, and I realize I changed the line (I removed the list()), which I did
not intended.
That said, I am not sure what you mean by "it only works for global
opts". What are global opts?
>
>> + for option in entry[1]:
>> + default = option[2]
>> + if not pycompat.ispy3 and isinstance(default, type(u'')):
>> + raise error.Abort(
>> + "Cannot encode %s.%s default value to ascii" %
>> + (cmd, option[1]),
>> + "Try changing the %s.%s default value to a "
>> + "non-unicode string" % (cmd, option[1]))
>
> Maybe use error.ProgrammingError
ok
--
Christophe de Vienne
More information about the Mercurial-devel
mailing list