Spaces:
Sleeping
Sleeping
| # Install git hook and Claude Code hook for this repo. | |
| # Run once after cloning: sh scripts/install-hooks.sh | |
| set -e | |
| REPO_ROOT=$(git rev-parse --show-toplevel) | |
| # ββ Git pre-commit hook ββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| HOOK_DST="$REPO_ROOT/.git/hooks/pre-commit" | |
| cp "$REPO_ROOT/scripts/hook-pre-commit-docs.sh" "$HOOK_DST" | |
| chmod +x "$HOOK_DST" | |
| echo "β git pre-commit hook installed β .git/hooks/pre-commit" | |
| # ββ Claude Code PreToolUse hook ββββββββββββββββββββββββββββββββββββββββββββ | |
| CLAUDE_DIR="$REPO_ROOT/.claude" | |
| CLAUDE_HOOKS="$CLAUDE_DIR/hooks" | |
| CLAUDE_SETTINGS="$CLAUDE_DIR/settings.json" | |
| mkdir -p "$CLAUDE_HOOKS" | |
| # Copy the hook script into .claude/hooks/ | |
| cp "$REPO_ROOT/scripts/hook-pre-commit-docs.sh" "$CLAUDE_HOOKS/pre-commit-docs-check.sh" | |
| chmod +x "$CLAUDE_HOOKS/pre-commit-docs-check.sh" | |
| # Merge the hook entry into .claude/settings.json | |
| if [ -f "$CLAUDE_SETTINGS" ]; then | |
| # Add hooks key if not already present using Python | |
| python3 - "$CLAUDE_SETTINGS" <<'PYEOF' | |
| import sys, json | |
| path = sys.argv[1] | |
| with open(path) as f: | |
| cfg = json.load(f) | |
| hook_entry = { | |
| "type": "command", | |
| "command": "bash .claude/hooks/pre-commit-docs-check.sh" | |
| } | |
| hooks = cfg.setdefault("hooks", {}) | |
| pre = hooks.setdefault("PreToolUse", []) | |
| # Find or create Bash matcher | |
| bash_matchers = [m for m in pre if m.get("matcher") == "Bash"] | |
| if bash_matchers: | |
| existing = bash_matchers[0].setdefault("hooks", []) | |
| cmds = [h.get("command") for h in existing] | |
| if hook_entry["command"] not in cmds: | |
| existing.append(hook_entry) | |
| else: | |
| pre.append({"matcher": "Bash", "hooks": [hook_entry]}) | |
| with open(path, "w") as f: | |
| json.dump(cfg, f, indent=2) | |
| f.write("\n") | |
| print("β Claude Code PreToolUse hook registered β .claude/settings.json") | |
| PYEOF | |
| else | |
| cat > "$CLAUDE_SETTINGS" <<JSON | |
| { | |
| "hooks": { | |
| "PreToolUse": [ | |
| { | |
| "matcher": "Bash", | |
| "hooks": [ | |
| { | |
| "type": "command", | |
| "command": "bash .claude/hooks/pre-commit-docs-check.sh" | |
| } | |
| ] | |
| } | |
| ] | |
| } | |
| } | |
| JSON | |
| echo "β Claude Code PreToolUse hook registered β .claude/settings.json (created)" | |
| fi | |