[PATCH V2] py3: a second argument to open can't be bytes
Gregory Szorc
gregory.szorc at gmail.com
Tue Oct 11 17:09:47 EDT 2016
> On Oct 11, 2016, at 18:50, Pierre-Yves David <pierre-yves.david at ens-lyon.org> wrote:
>
>
>
>> On 10/09/2016 06:14 PM, Augie Fackler wrote:
>>> On Sun, Oct 09, 2016 at 02:10:40PM +0200, Martijn Pieters wrote:
>>> # HG changeset patch
>>> # User Martijn Pieters <mjpieters at fb.com>
>>> # Date 1476015001 -7200
>>> # Sun Oct 09 14:10:01 2016 +0200
>>> # Node ID 82489cd912f332be976cf432673ad47af0d04cd7
>>> # Parent a56076f85aa6aa728457ecc571ff58514bc59896
>>> py3: a second argument to open can't be bytes
>>
>> Queued, thanks!
>
> I'm trying to double review this (to have it move from hg-commited to public phase) and this is a bit too obscure for me (I assume there was much more context around the py3 table). Martijn can you give me a bit more context about what it going on here? What problem are we fixing and how is this the right way to do it ?
The patch looks good to me. (I wrote the original source transformer code.)
>
>>> diff --git a/mercurial/__init__.py b/mercurial/__init__.py
>>> --- a/mercurial/__init__.py
>>> +++ b/mercurial/__init__.py
>>> @@ -305,6 +305,24 @@
>>> except IndexError:
>>> pass
>>>
>>> + # Bare open call (not an attribute on something else)
>>> + if (fn == 'open' and not (prevtoken.type == token.OP and
>>> + prevtoken.string == '.')):
>>> + try:
>>> + # (NAME, 'open')
>>> + # (OP, '(')
>>> + # (NAME|STRING, 'filename')
>>> + # (OP, ',')
>>> + # (NAME|STRING, mode)
>>> + st = tokens[i + 4]
>>> + if (st.type == token.STRING and
>>> + st.string[0] in ("'", '"')):
>>> + rt = tokenize.TokenInfo(st.type, 'u%s' % st.string,
>>> + st.start, st.end, st.line)
>>> + tokens[i + 4] = rt
>>> + except IndexError:
>>> + pass
>>> +
>>> # It changes iteritems to items as iteritems is not
>>> # present in Python 3 world.
>>> if fn == 'iteritems':
>>> @@ -319,7 +337,7 @@
>>> # ``replacetoken`` or any mechanism that changes semantics of module
>>> # loading is changed. Otherwise cached bytecode may get loaded without
>>> # the new transformation mechanisms applied.
>>> - BYTECODEHEADER = b'HG\x00\x04'
>>> + BYTECODEHEADER = b'HG\x00\x05'
>>>
>>> class hgloader(importlib.machinery.SourceFileLoader):
>>> """Custom module loader that transforms source code.
>>> _______________________________________________
>>> Mercurial-devel mailing list
>>> Mercurial-devel at mercurial-scm.org
>>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>>
>
> --
> Pierre-Yves David
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list