#!/usr/bin/env python3 """Создаёт и проверяет fixture запрета target внутри source.""" from __future__ import annotations import pathlib import sys CONTENT = b"self-target guard\r\n" def create(root: pathlib.Path) -> None: tree = root / "SRC" / "TREE" (tree / "INNER").mkdir(parents=True) (tree / "FILE.TXT").write_bytes(CONTENT) def verify(root: pathlib.Path) -> None: tree = root / "SRC" / "TREE" failures: list[str] = [] if (tree / "FILE.TXT").read_bytes() != CONTENT: failures.append("source FILE.TXT изменён") inner = tree / "INNER" if not inner.is_dir() or any(inner.iterdir()): failures.append("внутри source появился рекурсивный target") temporary = [path.as_posix() for path in tree.rglob("*") if path.name.upper().endswith(".TMP")] if temporary: failures.append(f"остались temp: {temporary}") if failures: for failure in failures: print(f"FAIL: {failure}") raise SystemExit(1) print("PASS: target-inside-source refused before mutation.") def main() -> None: if len(sys.argv) != 3 or sys.argv[1] not in {"create", "verify"}: raise SystemExit(f"usage: {sys.argv[0]} create|verify DIR") root = pathlib.Path(sys.argv[2]) if sys.argv[1] == "create": create(root) else: verify(root) if __name__ == "__main__": main()