Mercurial > hg
changeset 29751:8faac092bb0c
py3: make check-py3-compat.py use correct module name at loading pure modules
Before this patch, check-py3-compat.py implies unintentional ".pure"
sub-package name at loading pure modules, because module name is
composed by just replacing "/" in the path to actual ".py" file by
".".
This makes pure modules belong to "mercurial.pure" package, and
prevents them from importing a module belonging to "mercurial" package
relatively by "from . import foo" or so.
This is reason why pure modules fail to import another module
relatively only at examination by check-py3-compat.py.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Tue, 09 Aug 2016 02:28:34 +0900 |
parents | 297a0dc50320 |
children | 8a8c1c4b8f24 |
files | contrib/check-py3-compat.py tests/test-check-py3-compat.t |
diffstat | 2 files changed, 3 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/contrib/check-py3-compat.py Tue Aug 09 02:28:34 2016 +0900 +++ b/contrib/check-py3-compat.py Tue Aug 09 02:28:34 2016 +0900 @@ -55,7 +55,7 @@ # out module paths for things not in a package can be confusing. if f.startswith(('hgext/', 'mercurial/')) and not f.endswith('__init__.py'): assert f.endswith('.py') - name = f.replace('/', '.')[:-3] + name = f.replace('/', '.')[:-3].replace('.pure.', '.') with open(f, 'r') as fh: try: imp.load_module(name, fh, '', ('py', 'r', imp.PY_SOURCE))
--- a/tests/test-check-py3-compat.t Tue Aug 09 02:28:34 2016 +0900 +++ b/tests/test-check-py3-compat.t Tue Aug 09 02:28:34 2016 +0900 @@ -136,9 +136,8 @@ mercurial/patch.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob) mercurial/pathutil.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob) mercurial/peer.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob) - mercurial/pure/mpatch.py: error importing module: <ImportError> cannot import name 'policy' (line *) (glob) - mercurial/pure/osutil.py: error importing module: <ImportError> cannot import name 'policy' (line *) (glob) - mercurial/pure/parsers.py: error importing module: <ImportError> No module named 'mercurial.pure.node' (line *) (glob) + mercurial/pure/mpatch.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob) + mercurial/pure/parsers.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob) mercurial/pushkey.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob) mercurial/pvec.py: error importing: <TypeError> getattr(): attribute name must be string (error at pycompat.py:*) (glob) mercurial/registrar.py: error importing: <TypeError> getattr(): attribute name must be string (error at util.py:*) (glob)