Mercurial > hg
annotate hgdemandimport/__init__.py @ 40746:82c189c511bd
perf: add a `clear-revlogs` flag to `perfbookmarks`
This flag (off by default) makes it possible to enable the refresh of the
changelog and revlog. This is useful to check for costly side effects of
bookmark loading.
Usually, these side effects are shared with other logics (eg: tags).
example output in my mercurial repo (with 1 bookmark, so not a great example):
$ hg perfbookmarks
! wall 0.000044
$ hg perfbookmarks --clear-revlogs
! wall 0.001380
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Tue, 20 Nov 2018 10:55:20 +0000 |
parents | 670eb4fa1b86 |
children | 2372284d9457 |
rev | line source |
---|---|
32420
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 from __future__ import absolute_import |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
15 |
33859
8fb5212652ec
demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents:
32423
diff
changeset
|
16 import os |
32422
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
17 import sys |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
18 |
32423
859496bb6db3
demandimport: add python 3 implementation
Siddharth Agarwal <sid0@fb.com>
parents:
32422
diff
changeset
|
19 if sys.version_info[0] >= 3: |
859496bb6db3
demandimport: add python 3 implementation
Siddharth Agarwal <sid0@fb.com>
parents:
32422
diff
changeset
|
20 from . import demandimportpy3 as demandimport |
859496bb6db3
demandimport: add python 3 implementation
Siddharth Agarwal <sid0@fb.com>
parents:
32422
diff
changeset
|
21 else: |
859496bb6db3
demandimport: add python 3 implementation
Siddharth Agarwal <sid0@fb.com>
parents:
32422
diff
changeset
|
22 from . import demandimportpy2 as demandimport |
32420
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
23 |
37843
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33860
diff
changeset
|
24 # Full module names which can't be lazy imported. |
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33860
diff
changeset
|
25 # Extensions can add to this set. |
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33860
diff
changeset
|
26 IGNORES = { |
32422
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
27 '__future__', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
28 '_hashlib', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
29 # ImportError during pkg_resources/__init__.py:fixup_namespace_package |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
30 '_imp', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
31 '_xmlplus', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
32 'fcntl', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
33 'nt', # pathlib2 tests the existence of built-in 'nt' module |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
34 'win32com.gen_py', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
35 'win32com.shell', # 'appdirs' tries to import win32com.shell |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
36 '_winreg', # 2.7 mimetypes needs immediate ImportError |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
37 'pythoncom', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
38 # imported by tarfile, not available under Windows |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
39 'pwd', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
40 'grp', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
41 # imported by profile, itself imported by hotshot.stats, |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
42 # not available under Windows |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
43 'resource', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
44 # this trips up many extension authors |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
45 'gtk', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
46 # setuptools' pkg_resources.py expects "from __main__ import x" to |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
47 # raise ImportError if x not defined |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
48 '__main__', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
49 '_ssl', # conditional imports in the stdlib, issue1964 |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
50 '_sre', # issue4920 |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
51 'rfc822', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
52 'mimetools', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
53 'sqlalchemy.events', # has import-time side effects (issue5085) |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
54 # 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:
32420
diff
changeset
|
55 'distutils.msvc9compiler', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
56 '__builtin__', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
57 'builtins', |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
58 'urwid.command_map', # for pudb |
37843
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33860
diff
changeset
|
59 } |
32422
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
60 |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
61 _pypy = '__pypy__' in sys.builtin_module_names |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
62 |
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
63 if _pypy: |
37843
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33860
diff
changeset
|
64 # _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:
33860
diff
changeset
|
65 IGNORES.add('_ctypes.pointer') |
32422
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
66 |
37843
670eb4fa1b86
demandimport: make module ignores a set (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33860
diff
changeset
|
67 demandimport.init(IGNORES) |
32422
f37f9499fea8
demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents:
32420
diff
changeset
|
68 |
32420
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
69 # Re-export. |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
70 isenabled = demandimport.isenabled |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
71 disable = demandimport.disable |
0906b85bf222
demandimport: move to separate package
Siddharth Agarwal <sid0@fb.com>
parents:
diff
changeset
|
72 deactivated = demandimport.deactivated |
33859
8fb5212652ec
demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents:
32423
diff
changeset
|
73 |
8fb5212652ec
demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents:
32423
diff
changeset
|
74 def enable(): |
33860
3cfc9070245f
demandimport: disable if chg is being used
Jun Wu <quark@fb.com>
parents:
33859
diff
changeset
|
75 # chg pre-imports modules so do not enable demandimport for it |
3cfc9070245f
demandimport: disable if chg is being used
Jun Wu <quark@fb.com>
parents:
33859
diff
changeset
|
76 if ('CHGINTERNALMARK' not in os.environ |
3cfc9070245f
demandimport: disable if chg is being used
Jun Wu <quark@fb.com>
parents:
33859
diff
changeset
|
77 and os.environ.get('HGDEMANDIMPORT') != 'disable'): |
33859
8fb5212652ec
demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents:
32423
diff
changeset
|
78 demandimport.enable() |