sapling/eden/scm/edenscm/hgdemandimport/__init__.py
Xavier Deguillard b192e0b54b demandimport: re-enable
Summary:
Partially backport upstream
https://www.mercurial-scm.org/repo/hg/rev/f81c17ec303c to enable lazy loading
of python code contained in edenscmdeps3.zip.

Also, temporarily disabling the demandimport on Python3 is a bit tricky, for
the reasons mentioned in the deactivated function. Thus, instead of using the
disabled function, let's use the deactivated one.

Reviewed By: DurhamG

Differential Revision: D19672866

fbshipit-source-id: c9e39ed044121d962af1cc46745bdec72629c579
2020-02-05 11:23:29 -08:00

98 lines
2.9 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
"ctypes.windll", # for IPython on Linux to detect missing "windll"
]
_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
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()