Mercurial > hg-stable
changeset 30094:f701fffd21d8
py3: make check-py3-compat.py load modules in standard manner
Otherwise no code transformation would be applied to the modules which are
imported only by imp.load_module().
This change means modules are imported from PYTHONPATH, not from the paths
given by command arguments. This isn't always correct, but seems acceptable.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 08 Oct 2016 17:22:07 +0200 |
parents | 68010ed1636d |
children | e8aeeb28e35e |
files | contrib/check-py3-compat.py tests/test-check-py3-compat.t |
diffstat | 2 files changed, 23 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/contrib/check-py3-compat.py Sun Oct 09 08:31:39 2016 +0200 +++ b/contrib/check-py3-compat.py Sat Oct 08 17:22:07 2016 +0200 @@ -10,7 +10,7 @@ from __future__ import absolute_import, print_function import ast -import imp +import importlib import os import sys import traceback @@ -56,9 +56,9 @@ if f.startswith(('hgext/', 'mercurial/')) and not f.endswith('__init__.py'): assert f.endswith('.py') name = f.replace('/', '.')[:-3].replace('.pure.', '.') - with open(f, 'r') as fh: + if True: try: - imp.load_module(name, fh, f, ('py', 'r', imp.PY_SOURCE)) + importlib.import_module(name) except Exception as e: exc_type, exc_value, tb = sys.exc_info() # We walk the stack and ignore frames from our custom importer,
--- a/tests/test-check-py3-compat.t Sun Oct 09 08:31:39 2016 +0200 +++ b/tests/test-check-py3-compat.t Sat Oct 08 17:22:07 2016 +0200 @@ -16,41 +16,27 @@ $ hg files 'set:(**.py) - grep(pygments)' | sed 's|\\|/|g' \ > | xargs $PYTHON3 contrib/check-py3-compat.py \ > | sed 's/[0-9][0-9]*)$/*)/' - hgext/convert/bzr.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at bzr.py:*) - hgext/convert/convcmd.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at convcmd.py:*) - hgext/convert/cvs.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at cvs.py:*) - hgext/convert/darcs.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at darcs.py:*) - hgext/convert/filemap.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at filemap.py:*) - hgext/convert/git.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at git.py:*) - hgext/convert/gnuarch.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at gnuarch.py:*) - hgext/convert/hg.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at hg.py:*) - hgext/convert/monotone.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at monotone.py:*) - hgext/convert/p4.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at p4.py:*) - hgext/convert/subversion.py: error importing: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (error at subversion.py:*) - hgext/convert/transport.py: error importing: <ImportError> No module named 'svn.client' (error at transport.py:*) - hgext/fsmonitor/watchmanclient.py: error importing: <SystemError> Parent module 'hgext.fsmonitor' not loaded, cannot perform relative import (error at watchmanclient.py:*) - hgext/journal.py: error importing: <SystemError> Parent module 'hgext' not loaded, cannot perform relative import (error at journal.py:*) - hgext/largefiles/basestore.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at basestore.py:*) - hgext/largefiles/lfcommands.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at lfcommands.py:*) - hgext/largefiles/localstore.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at localstore.py:*) - hgext/largefiles/overrides.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at overrides.py:*) - hgext/largefiles/proto.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at proto.py:*) - hgext/largefiles/remotestore.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at remotestore.py:*) - hgext/largefiles/reposetup.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at reposetup.py:*) - hgext/largefiles/storefactory.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at storefactory.py:*) - hgext/largefiles/uisetup.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at uisetup.py:*) - hgext/largefiles/wirestore.py: error importing: <SystemError> Parent module 'hgext.largefiles' not loaded, cannot perform relative import (error at wirestore.py:*) - hgext/mq.py: error importing: <TypeError> startswith first arg must be str or a tuple of str, not bytes (error at extensions.py:*) - hgext/rebase.py: error importing: <TypeError> Can't convert 'bytes' object to str implicitly (error at registrar.py:*) - hgext/record.py: error importing: <KeyError> '^commit|ci' (error at record.py:*) - hgext/shelve.py: error importing: <SystemError> Parent module 'hgext' not loaded, cannot perform relative import (error at shelve.py:*) - hgext/transplant.py: error importing: <TypeError> Can't convert 'bytes' object to str implicitly (error at registrar.py:*) - mercurial/encoding.py: error importing: <TypeError> bytes expected, not str (error at encoding.py:*) - mercurial/fileset.py: error importing: <TypeError> Can't convert 'bytes' object to str implicitly (error at registrar.py:*) - mercurial/i18n.py: error importing: <TypeError> bytes expected, not str (error at i18n.py:*) - mercurial/revset.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) + hgext/convert/bzr.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/convert/convcmd.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/convert/subversion.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/convert/transport.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/fsmonitor/pywatchman/capabilities.py: error importing: <ImportError> No module named 'pybser' (error at __init__.py:*) + hgext/fsmonitor/pywatchman/pybser.py: error importing: <ImportError> No module named 'pybser' (error at __init__.py:*) + hgext/fsmonitor/watchmanclient.py: error importing: <ImportError> No module named 'pybser' (error at __init__.py:*) + hgext/journal.py: error importing: <ValueError> Type names and field names must be valid identifiers: "b'journalentry'" (error at journal.py:*) + hgext/largefiles/basestore.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/lfcommands.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/lfutil.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/localstore.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/overrides.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/proto.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/remotestore.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/reposetup.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/storefactory.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/uisetup.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/largefiles/wirestore.py: error importing: <SyntaxError> cannot mix bytes and nonbytes literals (subversion.py, line 533) (error at convcmd.py:*) + hgext/mq.py: error importing: <TypeError> __import__() argument 1 must be str, not bytes (error at extensions.py:*) mercurial/scmwindows.py: error importing: <ImportError> No module named 'winreg' (error at scmwindows.py:*) - mercurial/store.py: error importing: <TypeError> Can't convert 'bytes' object to str implicitly (error at store.py:*) mercurial/win32.py: error importing: <ImportError> No module named 'msvcrt' (error at win32.py:*) mercurial/windows.py: error importing: <ImportError> No module named 'msvcrt' (error at windows.py:*)