sapling/eden/scm/edenscm/__init__.py
Xavier Deguillard ff09f797f4 demandimport: disable in python3
Summary:
We don't need to it for the initial phases of the conversion. I've seen cases
were exceptions while importing were also hidden and caused weird behavior down
the line.

Reviewed By: DurhamG

Differential Revision: D19539064

fbshipit-source-id: 7415d88ef8fb69c949ed557ab0df7e6f7b39bf86
2020-01-23 11:41:02 -08:00

83 lines
2.5 KiB
Python

# 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.
from __future__ import absolute_import
def _fixsyspath():
"""Fix sys.path so core edenscm modules (edenscmnative, and 3rd party
libraries) are in sys.path
"""
# Do not expose those modules to edenscm.__dict__
import sys
import os
dirname = os.path.dirname
# __file__ is "hg/edenscm/__init__.py"
# libdir is "hg/"
# Do not follow symlinks (ex. do not use "realpath"). It breaks buck build.
libdir = dirname(dirname(os.path.abspath(__file__)))
# Make "edenscmdeps.zip" available in sys.path. It includes 3rd party
# pure-Python libraries like IPython, thrift runtime, etc.
#
# Note: On Windows, the released version of hg uses python27.zip for all
# pure Python modules including edenscm and everything in edenscmdeps.zip,
# so not being able to locate edenscmdeps.zip is not fatal.
for candidate in [libdir, os.path.join(libdir, "build")]:
depspath = os.path.join(candidate, "edenscmdeps.zip")
if os.path.exists(depspath) and depspath not in sys.path:
sys.path.insert(0, depspath)
# Make sure "edenscmnative" can be imported. Error early.
# pyre-fixme[21]: Could not find `edenscmnative`.
import edenscmnative
edenscmnative.__name__
_fixsyspath()
# Keep the module clean
del globals()["_fixsyspath"]
def run(args=None, fin=None, fout=None, ferr=None):
import sys
if args is None:
args = sys.argv
if args[1:4] == ["serve", "--cmdserver", "chgunix2"]:
# chgserver code path
# no demandimport, since chgserver wants to preimport everything.
from .mercurial import dispatch
dispatch.runchgserver()
else:
# non-chgserver code path
# - no chg in use: hgcommands::run -> HgPython::run_hg -> here
# - chg client: chgserver.runcommand -> bindings.commands.run ->
# hgcommands::run -> HgPython::run_hg -> here
from . import traceimport
traceimport.enable()
if sys.version_info[0] < 3:
# enable demandimport after enabling traceimport
from . import hgdemandimport
hgdemandimport.enable()
# demandimport has side effect on importing dispatch.
# so 'import dispatch' happens after demandimport
from .mercurial import dispatch
dispatch.run(args, fin, fout, ferr)