contrib/check-py3-compat.py
changeset 32374 194b0f781132
parent 32372 df448de7cf3b
child 32421 778dc37ce683
equal deleted inserted replaced
32373:5700825889fb 32374:194b0f781132
    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,