Support external vault roots across tooling

This commit is contained in:
2026-09-20 17:05:21 +02:00
parent 1cb6369282
commit 293b582e97
16 changed files with 573 additions and 204 deletions
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env python3
"""Install a vault-local hook that invokes this framework without copying its tools."""
import argparse
import shlex
import subprocess
from pathlib import Path
from vault_root import FRAMEWORK_ROOT, parse_vault_args
def main():
parser = argparse.ArgumentParser(description=__doc__)
root = parse_vault_args(parser).vault_root
repo = subprocess.run(["git", "-C", str(root), "rev-parse", "--show-toplevel"],
capture_output=True, text=True)
if repo.returncode or repo.stdout.strip() != str(root):
parser.error("vault root must be the Git repository root to install hooks")
result = subprocess.run(
["git", "-C", str(root), "rev-parse", "--path-format=absolute", "--git-path", "hooks"],
capture_output=True, text=True, check=True,
)
hook = Path(result.stdout.strip()) / "pre-commit"
marker = "# knowledge-base framework hook"
if hook.exists() or hook.is_symlink():
legacy = hook.is_symlink() and hook.resolve() in {
root / "scripts/pre-commit", FRAMEWORK_ROOT / "scripts/pre-commit",
}
managed = not hook.is_symlink() and marker in hook.read_text()
if not legacy and not managed:
parser.error(f"refusing to replace unmanaged hook: {hook}")
script = FRAMEWORK_ROOT / "scripts/pre-commit"
content = f"#!/bin/sh\n{marker}\nexec bash {shlex.quote(str(script))} {shlex.quote(str(root))}\n"
hook.parent.mkdir(parents=True, exist_ok=True)
if hook.is_symlink():
hook.unlink()
hook.write_text(content)
hook.chmod(0o755)
print(f"Installed {hook} -> {script} (vault: {root})")
if __name__ == "__main__":
main()