| |
| """Write a deterministic privacy receipt for explicitly selected local roots.""" |
|
|
| from __future__ import annotations |
|
|
| import argparse |
| import json |
| import sys |
| from pathlib import Path |
|
|
| sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src")) |
|
|
| from repro_control.privacy import scan_paths, write_receipt |
|
|
|
|
| def main() -> int: |
| parser = argparse.ArgumentParser() |
| parser.add_argument("--checkout", type=Path, required=True) |
| parser.add_argument("--root", type=Path, action="append", required=True) |
| parser.add_argument("--intended-remote-map", type=Path, required=True) |
| parser.add_argument("--output", type=Path, required=True) |
| args = parser.parse_args() |
| mapping = json.loads(args.intended_remote_map.read_text()) |
| receipt = scan_paths(args.root, relative_to=args.checkout, intended_remote_map=mapping) |
| write_receipt(args.output, receipt, require_clean=False) |
| print(json.dumps({"exit_code": receipt["exit_code"], "findings": len(receipt["findings"])})) |
| return receipt["exit_code"] |
|
|
|
|
| if __name__ == "__main__": |
| raise SystemExit(main()) |
|
|