contrib/packaging/packaging.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Mon, 06 Dec 2021 17:54:39 +0100
changeset 48448 62e6222cc5b6
parent 43660 303bf312d5ed
permissions -rwxr-xr-x
upgrade: only process revlogs that needs it by default We have more and more requirement that does not affect revlog or that only affect some of them. It is silly to force a full processing of all revlog to juste move the requirement around, or to simply rewrite the dirstate. So now, only the revlog that needs to be touched will be touched. Unless the --changelog & al flags are used. Differential Revision: https://phab.mercurial-scm.org/D11871

#!/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)