Mercurial > hg
view contrib/automation/automation.py @ 46325:e5e6282fa66a
hghave: split apart testing for the curses module and `tic` executable
ef771d329961 skipped the check for the `tic` executable, because the curses
module alone on Windows is enough to pass the `test-*-curses.t` tests. However,
`test-status-color.t` uses this same check and explicitly invoked the
executable, which fails on Windows. From the cursory searching I did, curses on
unix requires `tic`, which I assume is why they were tied together in the first
place. So this continues to require both to get past the curses guards on non
Windows platforms.
Differential Revision: https://phab.mercurial-scm.org/D9814
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 17 Jan 2021 22:25:15 -0500 |
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)