hgdemandimport/__init__.py
author Gregory Szorc <gregory.szorc@gmail.com>
Sat, 02 Nov 2019 12:42:23 -0700
branchstable
changeset 43385 6469c23a40a2
parent 43076 2372284d9457
child 45047 40120de810ba
permissions -rw-r--r--
fsmonitor: refresh pywatchman with upstream This commit vendors pywatchman commit 259dc66dc9591f9b7ce76d0275bb1065f390c9b1 from upstream without modifications. The previously vendored pywatchman from changeset 16f4b341288d was from Git commit c77452. This commit effectively undoes the following Mercurial changesets: * dd35abc409ee fsmonitor: correct an error message * b1f62cd39b5c fsmonitor: layer on another hack in bser.c for os.stat() compat (issue5811) * c31ce080eb75 py3: convert arguments, cwd and env to native strings when spawning subprocess * 876494fd967d cleanup: delete lots of unused local variables * 57264906a996 watchman: add the possibility to set the exact watchman binary location The newly-vendored code has support for specifying the binary location, so 57264906a996 does not need applied. But we do need to modify our code to specify a proper argument name. 876494fd967d is not important, so it will be ignored. c31ce080eb75 globally changed the code base to always pass str to subprocess. But pywatchman's code is Python 3 clean, so we don't need to do this. This leaves dd35abc409ee and b1f62cd39b5c, which will be re-applied in subsequent commits. Differential Revision: https://phab.mercurial-scm.org/D7201
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    33
    'nt',  # pathlib2 tests the existence of built-in 'nt' module
32422
f37f9499fea8 demandimport: move ignore list to __init__.py
Siddharth Agarwal <sid0@fb.com>
parents: 32420
diff changeset
    34
    'win32com.gen_py',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    35
    'win32com.shell',  # 'appdirs' tries to import win32com.shell
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    36
    '_winreg',  # 2.7 mimetypes needs immediate ImportError
32422
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__',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    49
    '_ssl',  # conditional imports in the stdlib, issue1964
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    50
    '_sre',  # issue4920
32422
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',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    53
    'sqlalchemy.events',  # has import-time side effects (issue5085)
32422
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',
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
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
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    74
33859
8fb5212652ec demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents: 32423
diff changeset
    75
def enable():
33860
3cfc9070245f demandimport: disable if chg is being used
Jun Wu <quark@fb.com>
parents: 33859
diff changeset
    76
    # chg pre-imports modules so do not enable demandimport for it
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    77
    if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    78
        'CHGINTERNALMARK' not in os.environ
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    79
        and os.environ.get('HGDEMANDIMPORT') != 'disable'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 37843
diff changeset
    80
    ):
33859
8fb5212652ec demandimport: move HGDEMANDIMPORT test to __init__.py
Jun Wu <quark@fb.com>
parents: 32423
diff changeset
    81
        demandimport.enable()