Mercurial > hg-stable
annotate hgdemandimport/__init__.py @ 51486:6c39edd1d348 stable
re2: make errors quiet
By default, the re2 library will output error on its own instead of keeping the
error in an exception. This make re2 printing spurious error before fallback to
the stdlib remodule that may accept the pattern or also fails to parse it and
raise a proper error that will be handled by Mercurial.
So we also pass an Option object that changes this default.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 02 May 2024 02:20:42 +0200 |
parents | 80c8dcfb73c6 |
children | 63ede7a43a37 |
rev | line source |
---|---|
32458
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
1 # hgdemandimport - global demand-loading of modules for Mercurial |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
2 # |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
3 # Copyright 2017 Facebook Inc. |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
4 # |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
6 # GNU General Public License version 2 or any later version. |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
7 |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
8 '''demandimport - automatic demand-loading of modules''' |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
9 |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
10 # This is in a separate package from mercurial because in Python 3, |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
11 # demand loading is per-package. Keeping demandimport in the mercurial package |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
12 # would disable demand loading for any modules in mercurial. |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
13 |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
14 |
33880
8fb5212652ec
demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents:
32461
diff
changeset
|
15 import os |
32460
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
16 import sys |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
17 |
49038
425585f057e0
demandimport: delete demandimportpy2 module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48966
diff
changeset
|
18 from . import demandimportpy3 as demandimport |
32458
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
19 |
37889
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33881
diff
changeset
|
20 # Full module names which can't be lazy imported. |
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33881
diff
changeset
|
21 # Extensions can add to this set. |
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33881
diff
changeset
|
22 IGNORES = { |
32460
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
23 '__future__', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
24 '_hashlib', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
25 # ImportError during pkg_resources/__init__.py:fixup_namespace_package |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
26 '_imp', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
27 '_xmlplus', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
28 'fcntl', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
29 'nt', # pathlib2 tests the existence of built-in 'nt' module |
32460
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
30 'win32com.gen_py', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
31 'win32com.shell', # 'appdirs' tries to import win32com.shell |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
32 '_winreg', # 2.7 mimetypes needs immediate ImportError |
32460
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
33 'pythoncom', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
34 # imported by tarfile, not available under Windows |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
35 'pwd', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
36 'grp', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
37 # imported by profile, itself imported by hotshot.stats, |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
38 # not available under Windows |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
39 'resource', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
40 # this trips up many extension authors |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
41 'gtk', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
42 # setuptools' pkg_resources.py expects "from __main__ import x" to |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
43 # raise ImportError if x not defined |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
44 '__main__', |
45215
81b4e7c866ec
hgdemandimport: bypass demandimport for _ast module (issue6407)
Augie Fackler <augie@google.com>
parents:
44841
diff
changeset
|
45 '_ast', # https://bugs.python.org/issue41631 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
46 '_ssl', # conditional imports in the stdlib, issue1964 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
47 '_sre', # issue4920 |
32460
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
48 'rfc822', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
49 'mimetools', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
50 'sqlalchemy.events', # has import-time side effects (issue5085) |
45222
07731064ac41
hgdemandimport: exclude more sqlalchemy modules
Ludovic Chabant <ludovic@chabant.com>
parents:
45215
diff
changeset
|
51 'sqlalchemy.dialects', # similar problems as above |
32460
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
52 # setuptools 8 expects this module to explode early when not on windows |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
53 'distutils.msvc9compiler', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
54 '__builtin__', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
55 'builtins', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
56 'urwid.command_map', # for pudb |
44841
40120de810ba
demandimport: ignore `lzma` module for demandimport
Manuel Jacob <me@manueljacob.de>
parents:
43076
diff
changeset
|
57 'lzma', |
50725
80c8dcfb73c6
demandimport: don't delay _distutils_hack import
Mads Kiilerich <mads@kiilerich.com>
parents:
49287
diff
changeset
|
58 # setuptools uses this hack to inject it's own distutils at import time |
80c8dcfb73c6
demandimport: don't delay _distutils_hack import
Mads Kiilerich <mads@kiilerich.com>
parents:
49287
diff
changeset
|
59 'setuptools', |
80c8dcfb73c6
demandimport: don't delay _distutils_hack import
Mads Kiilerich <mads@kiilerich.com>
parents:
49287
diff
changeset
|
60 '_distutils_hack.override', |
37889
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33881
diff
changeset
|
61 } |
32460
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
62 |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
63 _pypy = '__pypy__' in sys.builtin_module_names |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
64 |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
65 if _pypy: |
37889
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33881
diff
changeset
|
66 # _ctypes.pointer is shadowed by "from ... import pointer" (PyPy 5) |
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33881
diff
changeset
|
67 IGNORES.add('_ctypes.pointer') |
48885
fda7ec505dc5
demandimport: eagerly load msvcrt module on PyPy
Manuel Jacob <me@manueljacob.de>
parents:
45222
diff
changeset
|
68 # pure Python module on PyPy, must be loaded to raise ModuleNotFoundError |
fda7ec505dc5
demandimport: eagerly load msvcrt module on PyPy
Manuel Jacob <me@manueljacob.de>
parents:
45222
diff
changeset
|
69 # on non-Windows platforms |
fda7ec505dc5
demandimport: eagerly load msvcrt module on PyPy
Manuel Jacob <me@manueljacob.de>
parents:
45222
diff
changeset
|
70 IGNORES.add('msvcrt') |
32460
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
71 |
37889
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33881
diff
changeset
|
72 demandimport.init(IGNORES) |
32460
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32458
diff
changeset
|
73 |
32458
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
74 # Re-export. |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
75 isenabled = demandimport.isenabled |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
76 disable = demandimport.disable |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
77 deactivated = demandimport.deactivated |
33880
8fb5212652ec
demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents:
32461
diff
changeset
|
78 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
79 |
33880
8fb5212652ec
demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents:
32461
diff
changeset
|
80 def enable(): |
33881
3cfc9070245f
demandimport: disable if chg is being used
Jun Wu <quark@fb.com>
parents:
33880
diff
changeset
|
81 # chg pre-imports modules so do not enable demandimport for it |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
82 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
83 'CHGINTERNALMARK' not in os.environ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
84 and os.environ.get('HGDEMANDIMPORT') != 'disable' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37889
diff
changeset
|
85 ): |
33880
8fb5212652ec
demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents:
32461
diff
changeset
|
86 demandimport.enable() |