##// END OF EJS Templates
hgdemandimport: bypass demandimport for _ast module (issue6407)...
Augie Fackler -
r46006:81b4e7c8 stable
parent child Browse files
Show More
@@ -1,82 +1,83
1 # hgdemandimport - global demand-loading of modules for Mercurial
1 # hgdemandimport - global demand-loading of modules for Mercurial
2 #
2 #
3 # Copyright 2017 Facebook Inc.
3 # Copyright 2017 Facebook Inc.
4 #
4 #
5 # This software may be used and distributed according to the terms of the
5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 '''demandimport - automatic demand-loading of modules'''
8 '''demandimport - automatic demand-loading of modules'''
9
9
10 # This is in a separate package from mercurial because in Python 3,
10 # This is in a separate package from mercurial because in Python 3,
11 # demand loading is per-package. Keeping demandimport in the mercurial package
11 # demand loading is per-package. Keeping demandimport in the mercurial package
12 # would disable demand loading for any modules in mercurial.
12 # would disable demand loading for any modules in mercurial.
13
13
14 from __future__ import absolute_import
14 from __future__ import absolute_import
15
15
16 import os
16 import os
17 import sys
17 import sys
18
18
19 if sys.version_info[0] >= 3:
19 if sys.version_info[0] >= 3:
20 from . import demandimportpy3 as demandimport
20 from . import demandimportpy3 as demandimport
21 else:
21 else:
22 from . import demandimportpy2 as demandimport
22 from . import demandimportpy2 as demandimport
23
23
24 # Full module names which can't be lazy imported.
24 # Full module names which can't be lazy imported.
25 # Extensions can add to this set.
25 # Extensions can add to this set.
26 IGNORES = {
26 IGNORES = {
27 '__future__',
27 '__future__',
28 '_hashlib',
28 '_hashlib',
29 # ImportError during pkg_resources/__init__.py:fixup_namespace_package
29 # ImportError during pkg_resources/__init__.py:fixup_namespace_package
30 '_imp',
30 '_imp',
31 '_xmlplus',
31 '_xmlplus',
32 'fcntl',
32 'fcntl',
33 'nt', # pathlib2 tests the existence of built-in 'nt' module
33 'nt', # pathlib2 tests the existence of built-in 'nt' module
34 'win32com.gen_py',
34 'win32com.gen_py',
35 'win32com.shell', # 'appdirs' tries to import win32com.shell
35 'win32com.shell', # 'appdirs' tries to import win32com.shell
36 '_winreg', # 2.7 mimetypes needs immediate ImportError
36 '_winreg', # 2.7 mimetypes needs immediate ImportError
37 'pythoncom',
37 'pythoncom',
38 # imported by tarfile, not available under Windows
38 # imported by tarfile, not available under Windows
39 'pwd',
39 'pwd',
40 'grp',
40 'grp',
41 # imported by profile, itself imported by hotshot.stats,
41 # imported by profile, itself imported by hotshot.stats,
42 # not available under Windows
42 # not available under Windows
43 'resource',
43 'resource',
44 # this trips up many extension authors
44 # this trips up many extension authors
45 'gtk',
45 'gtk',
46 # setuptools' pkg_resources.py expects "from __main__ import x" to
46 # setuptools' pkg_resources.py expects "from __main__ import x" to
47 # raise ImportError if x not defined
47 # raise ImportError if x not defined
48 '__main__',
48 '__main__',
49 '_ast', # https://bugs.python.org/issue41631
49 '_ssl', # conditional imports in the stdlib, issue1964
50 '_ssl', # conditional imports in the stdlib, issue1964
50 '_sre', # issue4920
51 '_sre', # issue4920
51 'rfc822',
52 'rfc822',
52 'mimetools',
53 'mimetools',
53 'sqlalchemy.events', # has import-time side effects (issue5085)
54 'sqlalchemy.events', # has import-time side effects (issue5085)
54 # setuptools 8 expects this module to explode early when not on windows
55 # setuptools 8 expects this module to explode early when not on windows
55 'distutils.msvc9compiler',
56 'distutils.msvc9compiler',
56 '__builtin__',
57 '__builtin__',
57 'builtins',
58 'builtins',
58 'urwid.command_map', # for pudb
59 'urwid.command_map', # for pudb
59 'lzma',
60 'lzma',
60 }
61 }
61
62
62 _pypy = '__pypy__' in sys.builtin_module_names
63 _pypy = '__pypy__' in sys.builtin_module_names
63
64
64 if _pypy:
65 if _pypy:
65 # _ctypes.pointer is shadowed by "from ... import pointer" (PyPy 5)
66 # _ctypes.pointer is shadowed by "from ... import pointer" (PyPy 5)
66 IGNORES.add('_ctypes.pointer')
67 IGNORES.add('_ctypes.pointer')
67
68
68 demandimport.init(IGNORES)
69 demandimport.init(IGNORES)
69
70
70 # Re-export.
71 # Re-export.
71 isenabled = demandimport.isenabled
72 isenabled = demandimport.isenabled
72 disable = demandimport.disable
73 disable = demandimport.disable
73 deactivated = demandimport.deactivated
74 deactivated = demandimport.deactivated
74
75
75
76
76 def enable():
77 def enable():
77 # chg pre-imports modules so do not enable demandimport for it
78 # chg pre-imports modules so do not enable demandimport for it
78 if (
79 if (
79 'CHGINTERNALMARK' not in os.environ
80 'CHGINTERNALMARK' not in os.environ
80 and os.environ.get('HGDEMANDIMPORT') != 'disable'
81 and os.environ.get('HGDEMANDIMPORT') != 'disable'
81 ):
82 ):
82 demandimport.enable()
83 demandimport.enable()
General Comments 0
You need to be logged in to leave comments. Login now