[PATCH] py3: make keys of keyword arguments strings

Pulkit Goyal 7895pulkit at gmail.com
Wed Dec 7 09:52:49 EST 2016


On Wed, Dec 7, 2016 at 7:44 PM, Yuya Nishihara <yuya at tcha.org> wrote:
> On Wed, 07 Dec 2016 10:43:24 +0530, Pulkit Goyal wrote:
>> # HG changeset patch
>> # User Pulkit Goyal <7895pulkit at gmail.com>
>> # Date 1481085372 -19800
>> #      Wed Dec 07 10:06:12 2016 +0530
>> # Node ID 60372f5694c6b188fba456cfd269690e84ac645b
>> # Parent  831d29deed083618bddc2fade7d2a6fe297c896d
>> py3: make keys of keyword arguments strings
>>
>> keys of keyword arguments on Python 3 has to be string. We are dealing with
>> bytes in our codebase so the keys are also bytes. We need to convert the keys
>> to unicodes to make the code run. We have to also reverse this process so that
>> functions on args dictionary like get() etc. don't result in key not found.
>>
>> Also after this patch, `hg version` now runs on Python 3.5. Hurray!
>
> Nice!
>
>> diff -r 831d29deed08 -r 60372f5694c6 mercurial/dispatch.py
>> --- a/mercurial/dispatch.py   Tue Dec 06 11:44:49 2016 +0000
>> +++ b/mercurial/dispatch.py   Wed Dec 07 10:06:12 2016 +0530
>> @@ -803,6 +803,7 @@
>>
>>          msg = ' '.join(' ' in a and repr(a) or a for a in fullargs)
>>          ui.log("command", '%s\n', msg)
>> +        cmdoptions = {pycompat.fsdecode(k):v for k, v in cmdoptions.items()}
>>          d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
>
> Dict comprehension isn't available on Python 2.6.

Nice catch, v2 coming.
>
> I prefer sysstr() here because we know 'k' must be a symbol-like string. We'll
> probably need utility functions to convert kwargs between {unicode: x} and
> {bytes: x}.

Utility functions help in cleaner code, I will add them in pycompat in
next version.


More information about the Mercurial-devel mailing list