mirror of
https://github.com/elder-plinius/OBLITERATUS.git
synced 2026-08-18 00:47:23 +02:00
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Run mutmut with prepared coverage and stats artifacts in a fresh interpreter."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import os
|
|
from pathlib import Path
|
|
import shutil
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
|
SITECUSTOMIZE = PROJECT_ROOT / "scripts" / "mutmut_coverage_sitecustomize"
|
|
|
|
|
|
def _parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("mutmut_args", nargs=argparse.REMAINDER)
|
|
return parser
|
|
|
|
|
|
def main() -> int:
|
|
args = _parser().parse_args()
|
|
mutmut = shutil.which("mutmut")
|
|
if mutmut is None:
|
|
print("prepared mutmut runner failed: mutmut executable is not on PATH")
|
|
return 1
|
|
|
|
pythonpath = os.environ.get("PYTHONPATH")
|
|
prefixes = [str(SITECUSTOMIZE), str(PROJECT_ROOT)]
|
|
os.environ["PYTHONPATH"] = os.pathsep.join(
|
|
[*prefixes, *([pythonpath] if pythonpath else [])],
|
|
)
|
|
os.environ["OBLITERATUS_MUTMUT_REUSE_COVERAGE"] = "1"
|
|
os.environ["OBLITERATUS_MUTMUT_REUSE_STATS"] = "1"
|
|
os.environ["OBLITERATUS_MUTMUT_SUBPROCESS_PREFLIGHT"] = "1"
|
|
|
|
command = [mutmut, *(args.mutmut_args or ["run"])]
|
|
os.execv(mutmut, command)
|
|
raise AssertionError("os.execv returned unexpectedly")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|