#!/usr/bin/env python3 from __future__ import annotations import argparse import json import subprocess import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[2] def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="Clone GovOPlaN repositories listed in repositories.json.") parser.add_argument("--check", action="store_true", help="Only report missing repositories.") parser.add_argument("--parent", type=Path, help="Override checkout parent directory.") return parser.parse_args() def main() -> int: args = parse_args() manifest = json.loads((ROOT / "repositories.json").read_text()) parent = args.parent or Path(manifest["default_parent"]) missing: list[dict[str, str]] = [] for entry in manifest["repositories"]: repo = parent / entry["path"] if repo.exists(): continue missing.append(entry) print(f"missing: {entry['name']} -> {repo}") if not args.check: subprocess.run(["git", "clone", entry["remote"], str(repo)], check=True) if args.check: return 1 if missing else 0 return 0 if __name__ == "__main__": sys.exit(main())