[PATCH 01 of 10] contrib: have import-checker work mostly with native strings for mod names
Augie Fackler
raf at durin42.com
Mon Aug 28 09:57:06 EDT 2017
> On Aug 28, 2017, at 02:55, Martin von Zweigbergk <martinvonz at google.com> wrote:
>
> On Wed, Aug 23, 2017 at 7:55 AM, Augie Fackler <raf at durin42.com> wrote:
>> # HG changeset patch
>> # User Augie Fackler <raf at durin42.com>
>> # Date 1503421161 14400
>> # Tue Aug 22 12:59:21 2017 -0400
>> # Node ID e915b9703f675b2f76c512347ddff0f6c65a9748
>> # Parent edf503e5dfd408f900f3bad0a6923573813e276b
>> contrib: have import-checker work mostly with native strings for mod names
>>
>> Module names are a bit awkward to deal with portably otherwise.
>>
>> diff --git a/contrib/import-checker.py b/contrib/import-checker.py
>> --- a/contrib/import-checker.py
>> +++ b/contrib/import-checker.py
>> @@ -147,6 +147,8 @@ def fromlocalfunc(modulename, localmods)
>>>>> fromlocal2('bar', 2)
>> ('foo.bar', 'foo.bar.__init__', True)
>> """
>> + if not isinstance(modulename, str):
>> + modulename = modulename.decode('ascii')
>
> Should this be 'if isinstance(modulename, bytes)' instead? That seems
> clearer to me.
Clearer, but wrong, because str == bytes on Python 2 and you'd end up decoding to a unicode rather than to a native string.
> Also, 'abc'.decode('ascii') seems to fail on Py3. Is
> that a concern?
No, because 'abc' is instance str, so you wouldn't evaluate the body of the if statement.
>
>> prefix = '.'.join(modulename.split('.')[:-1])
>> if prefix:
>> prefix += '.'
>> @@ -406,6 +408,8 @@ def verify_modern_convention(module, roo
>> * Certain modules must be aliased to alternate names to avoid aliasing
>> and readability problems. See `requirealias`.
>> """
>> + if not isinstance(module, str):
>> + module = module.decode('ascii')
>> topmodule = module.split('.')[0]
>> fromlocal = fromlocalfunc(module, localmods)
>>
>> @@ -724,6 +728,9 @@ def main(argv):
>> localmodpaths[modname] = source_path
>> localmods = populateextmods(localmodpaths)
>> for localmodname, source_path in sorted(localmodpaths.items()):
>> + if not isinstance(localmodname, bytes):
>> + # This is only safe because all hg's files are ascii
>> + localmodname = localmodname.encode('ascii')
>> for src, modname, name, line in sources(source_path, localmodname):
>> try:
>> used_imports[modname] = sorted(
>> _______________________________________________
>> 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