equal
deleted
inserted
replaced
12 import ast |
12 import ast |
13 import importlib |
13 import importlib |
14 import os |
14 import os |
15 import sys |
15 import sys |
16 import traceback |
16 import traceback |
17 |
|
18 # Modules that have both Python and C implementations. |
|
19 _dualmodules = ( |
|
20 ) |
|
21 |
17 |
22 def check_compat_py2(f): |
18 def check_compat_py2(f): |
23 """Check Python 3 compatibility for a file with Python 2""" |
19 """Check Python 3 compatibility for a file with Python 2""" |
24 with open(f, 'rb') as fh: |
20 with open(f, 'rb') as fh: |
25 content = fh.read() |
21 content = fh.read() |
58 # For now we only support mercurial.* and hgext.* modules because figuring |
54 # For now we only support mercurial.* and hgext.* modules because figuring |
59 # out module paths for things not in a package can be confusing. |
55 # out module paths for things not in a package can be confusing. |
60 if f.startswith(('hgext/', 'mercurial/')) and not f.endswith('__init__.py'): |
56 if f.startswith(('hgext/', 'mercurial/')) and not f.endswith('__init__.py'): |
61 assert f.endswith('.py') |
57 assert f.endswith('.py') |
62 name = f.replace('/', '.')[:-3] |
58 name = f.replace('/', '.')[:-3] |
63 if f.endswith(_dualmodules): |
|
64 name = name.replace('.pure.', '.') |
|
65 try: |
59 try: |
66 importlib.import_module(name) |
60 importlib.import_module(name) |
67 except Exception as e: |
61 except Exception as e: |
68 exc_type, exc_value, tb = sys.exc_info() |
62 exc_type, exc_value, tb = sys.exc_info() |
69 # We walk the stack and ignore frames from our custom importer, |
63 # We walk the stack and ignore frames from our custom importer, |