Files
govoplan/tools/repo/bootstrap-repositories.py

43 lines
1.2 KiB
Python

#!/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())