##// END OF EJS Templates
interfaces: make `dirstate` Protocol class methods abstract...
interfaces: make `dirstate` Protocol class methods abstract Now all known Protocol methods that should be implemented by the subclass are abstract. See cdd4bc69bfc1 for details. Note that this will break the `git` extension more, because there are a bunch of methods that aren't implemented that should be, in favor of some very old methods that won't be called (like `add()` and `drop()`). It's already broken, so I'm not taking the time to figure out how to modernize it right now. It's not detected by pytype because the only instantiation of `gitdirstate` is in `git/__init__.py`, which was already excluded from pytype checking for some other reason. AT least with this, it 1) doesn't get forgotten about, and 2) will require changing the interface if/when the core dirstate class evolves.

File last commit:

r44059:303bf312 default
r53405:2ac368d0 default
Show More
packaging.py
74 lines | 1.7 KiB | text/x-python | PythonLexer
#!/usr/bin/env python3
#
# packaging.py - Mercurial packaging functionality
#
# Copyright 2019 Gregory Szorc <gregory.szorc@gmail.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
import os
import pathlib
import subprocess
import sys
import venv
HERE = pathlib.Path(os.path.abspath(__file__)).parent
REQUIREMENTS_TXT = HERE / "requirements.txt"
SOURCE_DIR = HERE.parent.parent
VENV = SOURCE_DIR / "build" / "venv-packaging"
def bootstrap():
venv_created = not VENV.exists()
VENV.parent.mkdir(exist_ok=True)
venv.create(VENV, with_pip=True)
if os.name == "nt":
venv_bin = VENV / "Scripts"
pip = venv_bin / "pip.exe"
python = venv_bin / "python.exe"
else:
venv_bin = VENV / "bin"
pip = venv_bin / "pip"
python = venv_bin / "python"
args = [
str(pip),
"install",
"-r",
str(REQUIREMENTS_TXT),
"--disable-pip-version-check",
]
if not venv_created:
args.append("-q")
subprocess.run(args, check=True)
os.environ["HGPACKAGING_BOOTSTRAPPED"] = "1"
os.environ["PATH"] = "%s%s%s" % (venv_bin, os.pathsep, os.environ["PATH"])
subprocess.run([str(python), __file__] + sys.argv[1:], check=True)
def run():
import hgpackaging.cli as cli
# Need to strip off main Python executable.
cli.main()
if __name__ == "__main__":
try:
if "HGPACKAGING_BOOTSTRAPPED" not in os.environ:
bootstrap()
else:
run()
except subprocess.CalledProcessError as e:
sys.exit(e.returncode)
except KeyboardInterrupt:
sys.exit(1)