Support external vault roots across tooling
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user