[PATCH 1 of 2] encoding: teach unitolocal() and unifromlocal() to handle None
Matt Harbison
mharbison72 at gmail.com
Sun Sep 23 13:33:31 UTC 2018
> On Sep 23, 2018, at 2:49 AM, Yuya Nishihara <yuya at tcha.org> wrote:
>
>> On Sun, 23 Sep 2018 01:18:52 -0400, Matt Harbison wrote:
>> # HG changeset patch
>> # User Matt Harbison <matt_harbison at yahoo.com>
>> # Date 1537667864 14400
>> # Sat Sep 22 21:57:44 2018 -0400
>> # Node ID 10b1e61357ac546e70e590cc79889c0889e7bc22
>> # Parent ca417c9464d378661e9e962be1447647006297f3
>> encoding: teach unitolocal() and unifromlocal() to handle None
>>
>> These are aliased to str{to,from}local(), along with pycompat.identity(),
>> depending on the platform. It's inconsistent that None works on py2 because of
>> identity(), but not on py3. This will be needed in the next patch.
>>
>> diff --git a/mercurial/encoding.py b/mercurial/encoding.py
>> --- a/mercurial/encoding.py
>> +++ b/mercurial/encoding.py
>> @@ -202,10 +202,14 @@ def fromlocal(s):
>>
>> def unitolocal(u):
>> """Convert a unicode string to a byte string of local encoding"""
>> + if u is None:
>> + return None
>> return tolocal(u.encode('utf-8'))
>>
>> def unifromlocal(s):
>> """Convert a byte string of local encoding to a unicode string"""
>> + if s is None:
>> + return None
>> return fromlocal(s).decode('utf-8')
>
> I'm not a fan of making low-level functions untyped. Instead, maybe you can
> wrap function calls with pycompat.rapply().
IIUC, you’re saying in the next patch, either change the Windows alias of procutil.tonativestr() to a lambda that uses pycompat.rapply(), or more verbosely, use rapply() everywhere that it converted to Unicode? Can you explain the “untyped low-level functions” part, and why that’s bad?
More information about the Mercurial-devel
mailing list