Skip to content
Snippets Groups Projects
setup-base-dir 2.42 KiB
Newer Older
#!/usr/bin/env python3

import os
import stat
import sys
import subprocess
from pathlib import Path


USAGE = "USAGE: %s ROOTPATH" % os.path.basename(sys.argv[0])

POULPE_DIR = Path(__file__).absolute().parent.parent

RESULT_DIR = "results"
BIN_ENV_DIR = "bin-envs"
DATA_ENV_DIR = "data-envs"
BENCHMARK_DIR = "benchmarks"
SUITE_DIR = "suites"


def install_poulpe():
    """setup a venv and install poulpe in it"""
    print("Installing poulpe (editable) into a new venv")
    install_venv = [sys.executable, "-m", "venv", ".venv"]
    update_pip = [
        str(Path(".venv") / "bin" / "pip"),
        "install",
        "--quiet",
        "--upgrade",
        "pip",
    ]
    install_poulpe = [
        str(Path(".venv") / "bin" / "pip"),
        "install",
        "--quiet",
        "--editable",
        str(POULPE_DIR),
    ]

    commands = [install_venv, update_pip, install_poulpe]

    for command in commands:
        subprocess.run(command, check=True)


POULPE_PROXY = """#!/usr/bin/bash
base="`dirname $0`"
"$base"/../.venv/bin/poulpe "$@"
BASH_PROXY = """#!/usr/bin/bash
base="`dirname $0`"
. "$base"/../.venv/bin/activate
"$@"
"""


def setup_quick_access():
    print('Creating a "bin/" directory with some utility')
    Path("bin").mkdir(parents=True)

    env_bin = Path("..") / ".venv" / "bin"
    dir_bin = Path("bin")

    poulpe_proxy = dir_bin / "poulpe"
    poulpe_proxy.write_text(POULPE_PROXY)
    poulpe_proxy.chmod(poulpe_proxy.stat().st_mode | stat.S_IEXEC)

    os.symlink(env_bin / "activate", dir_bin / "activate")

    bash_proxy = dir_bin / "shell"
    bash_proxy.write_text(BASH_PROXY)
    bash_proxy.chmod(bash_proxy.stat().st_mode | stat.S_IEXEC)


def setup_base_dir(path):
    base_path = Path(path).absolute()
    print("Creating folders")
    base_path.mkdir(parents=True)
    base_path.joinpath(RESULT_DIR).mkdir()
    base_path.joinpath(BIN_ENV_DIR).mkdir()
    base_path.joinpath(DATA_ENV_DIR).mkdir()

    old_dir = os.curdir
    os.chdir(base_path)
    try:
        install_poulpe()
        setup_quick_access()

        print("Create symlinks to development Poulpe for suites")
        source = (POULPE_DIR / SUITE_DIR).resolve()
        os.symlink(source, SUITE_DIR)
    finally:
        os.chdir(old_dir)

    # TODO HGPERFPATH


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print(USAGE, file=sys.stderr)
        sys.exit(128)
    else:
        ret = setup_base_dir(sys.argv[1])
        sys.exit(ret)