mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
ab3a7cb21f
Summary: In preparation for merging fb-mercurial sources to the Eden repository, move everything from the top-level directory into an `eden/scm` subdirectory.
110 lines
3.0 KiB
Python
110 lines
3.0 KiB
Python
# Portions Copyright (c) Facebook, Inc. and its affiliates.
|
|
#
|
|
# This software may be used and distributed according to the terms of the
|
|
# GNU General Public License version 2.
|
|
|
|
# hgdemandimport - global demand-loading of modules for Mercurial
|
|
#
|
|
# Copyright Matt Mackall <mpm@selenic.com> and others
|
|
#
|
|
# This software may be used and distributed according to the terms of the
|
|
# GNU General Public License version 2 or any later version.
|
|
|
|
"""demandimport - automatic demand-loading of modules"""
|
|
|
|
# This is in a separate package from mercurial because in Python 3,
|
|
# demand loading is per-package. Keeping demandimport in the mercurial package
|
|
# would disable demand loading for any modules in mercurial.
|
|
|
|
from __future__ import absolute_import
|
|
|
|
import contextlib
|
|
import os
|
|
import sys
|
|
|
|
|
|
if sys.version_info[0] >= 3:
|
|
from . import demandimportpy3 as demandimport
|
|
else:
|
|
from . import demandimportpy2 as demandimport
|
|
|
|
|
|
# Extensions can add to this list if necessary.
|
|
ignore = [
|
|
"__future__",
|
|
"_hashlib",
|
|
# ImportError during pkg_resources/__init__.py:fixup_namespace_package
|
|
"_imp",
|
|
"_xmlplus",
|
|
"fcntl",
|
|
"nt", # pathlib2 tests the existence of built-in 'nt' module
|
|
"win32com.gen_py",
|
|
"win32com.shell", # 'appdirs' tries to import win32com.shell
|
|
"_winreg", # 2.7 mimetypes needs immediate ImportError
|
|
"pythoncom",
|
|
# imported by tarfile, not available under Windows
|
|
"pwd",
|
|
"grp",
|
|
# imported by profile, itself imported by hotshot.stats,
|
|
# not available under Windows
|
|
"resource",
|
|
# this trips up many extension authors
|
|
"gtk",
|
|
# setuptools' pkg_resources.py expects "from __main__ import x" to
|
|
# raise ImportError if x not defined
|
|
"__main__",
|
|
"_ssl", # conditional imports in the stdlib, issue1964
|
|
"_sre", # issue4920
|
|
"rfc822",
|
|
"mimetools",
|
|
"sqlalchemy.events", # has import-time side effects (issue5085)
|
|
# setuptools 8 expects this module to explode early when not on windows
|
|
"distutils.msvc9compiler",
|
|
"__builtin__",
|
|
"builtins",
|
|
"urwid.command_map", # for pudb
|
|
"_thread", # For RLock
|
|
"_scandir", # for IPython
|
|
"collections.abc", # for IPython - pickleshare
|
|
"sqlite3", # for IPython to detect missing sqlite
|
|
"pyreadline", # for IPython on Windows to detect missing pyreadline
|
|
]
|
|
|
|
_pypy = "__pypy__" in sys.builtin_module_names
|
|
|
|
if _pypy:
|
|
ignore.extend(
|
|
[
|
|
# _ctypes.pointer is shadowed by "from ... import pointer" (PyPy 5)
|
|
"_ctypes.pointer"
|
|
]
|
|
)
|
|
|
|
demandimport.init(ignore)
|
|
|
|
# Re-export.
|
|
isenabled = demandimport.isenabled
|
|
disable = demandimport.disable
|
|
deactivated = demandimport.deactivated
|
|
|
|
|
|
def enable():
|
|
# chg pre-imports modules so do not enable demandimport for it
|
|
if (
|
|
"CHGINTERNALMARK" not in os.environ
|
|
and os.environ.get("HGDEMANDIMPORT") != "disable"
|
|
):
|
|
demandimport.enable()
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def disabled():
|
|
if isenabled():
|
|
disable()
|
|
try:
|
|
yield
|
|
finally:
|
|
enable()
|
|
else:
|
|
yield
|