Mercurial > hg
view contrib/automation/automation.py @ 45090:0ecb3b11fcad
rebase: correctly check for empty commit in in-memory mode
The new code has a small overhead in the empty commit case, as a `memctx` object
is always created, but I don’t think it’s justified here to duplicate code
to optimize a relatively unlikely code path.
Differential Revision: https://phab.mercurial-scm.org/D8732
author | Manuel Jacob <me@manueljacob.de> |
---|---|
date | Sat, 11 Jul 2020 03:10:23 +0200 |
parents | 2372284d9457 |
children |
line wrap: on
line source
#!/usr/bin/env python3 # # automation.py - Perform tasks on remote machines # # 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-automation' 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['HGAUTOMATION_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 hgautomation.cli as cli # Need to strip off main Python executable. cli.main() if __name__ == '__main__': try: if 'HGAUTOMATION_BOOTSTRAPPED' not in os.environ: bootstrap() else: run() except subprocess.CalledProcessError as e: sys.exit(e.returncode) except KeyboardInterrupt: sys.exit(1)