#!/usr/bin/env python3 """repoint.py drill|restore — point scratch guest 9202 at the DRILL catalog, or back at the live one (`09` §6.5; R-615: the cache directory goes too). Saved config: controller.yaml.pre-newapps1001. Three controls printed each way.""" import io, re, subprocess, sys import walk as w VOL = "/var/lib/docker/volumes/felhom-controller-data/_data" SAVE = f"{VOL}/controller.yaml.pre-newapps1001" DRILL_REPO = "https://gitea.dooplex.hu/admin/app-catalog-drill.git" def creds(): for l in io.open("/home/kisfenyo/.git-credentials").read().strip().split("\n"): m = re.match(r'https://(admin):([^@]+)@gitea\.dooplex\.hu', l) if m: return m.group(1), m.group(2) raise SystemExit("no admin credential") def controls(want): print("CONTROL 1 — the box's clone:", w.guest(f"cd {VOL}/data/catalog-cache && git log --oneline -1 && git remote get-url origin | sed 's#//[^@]*@#//#'").strip()) print("CONTROL 2 — live main:", subprocess.run(["git", "ls-remote", "https://gitea.dooplex.hu/admin/app-catalog-felhom.eu.git", "refs/heads/main"], capture_output=True, text=True).stdout.split()[:1]) print("CONTROL 3 — expected:", want) if sys.argv[1] == "drill": u, t = creds() print(w.guest(f""" set -e test -f {SAVE} || cp -p {VOL}/controller.yaml {SAVE} python3 - <<'PY' import re p = "{VOL}/controller.yaml" s = open(p).read() s = re.sub(r'(^\\s+repo_url: ).*$', r'\\g<1>{DRILL_REPO}', s, count=1, flags=re.M) s = re.sub(r'(^git:(?:\\n\\s+.*)*?\\n\\s+token: ).*$', r'\\g<1>"{t}"', s, count=1, flags=re.M) s = re.sub(r'(^git:(?:\\n\\s+.*)*?\\n\\s+username: ).*$', r'\\g<1>"{u}"', s, count=1, flags=re.M) open(p, "w").write(s) PY rm -rf {VOL}/catalog-cache {VOL}/data/catalog-cache docker restart felhom-controller >/dev/null sleep 20 grep -A6 '^git:' {VOL}/controller.yaml | sed 's/token:.*/token: /' """)) else: print(w.guest(f""" set -e cp -p {SAVE} {VOL}/controller.yaml rm -rf {VOL}/catalog-cache {VOL}/data/catalog-cache docker restart felhom-controller >/dev/null sleep 20 grep -A6 '^git:' {VOL}/controller.yaml | sed 's/token:.*/token: /' """)) w.login() w.sync_rescan() controls(sys.argv[1])