Files

31 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# doctor — idempotently wire up pre-commit framework into git's hook system.
# (.pre-commit-config.yaml at the repo root drives it.)
#
# Silent on success. If pre-commit is missing, prints a one-line note and
# exits 0 so callers (e.g. `make dev`) don't block on an optional tool.
# CI still runs the real linters.
#
# Quirks handled:
# - pre-commit refuses to install when core.hooksPath is set, even when
# it's set to the default location (a leftover from a stale setup).
# Detect that exact case and unset it before installing.
# - core.hooksPath is shared between the main repo and every worktree,
# so a single install covers all of them.
set -euo pipefail
if ! command -v pre-commit >/dev/null 2>&1; then
echo "⚠ pre-commit not found on PATH — install with 'pip install pre-commit' to enable hook-based format/lint on commit."
exit 0
fi
default_hooks="$(git rev-parse --git-common-dir)/hooks"
current="$(git config --get core.hooksPath 2>/dev/null || true)"
if [ -n "$current" ] && [ "$current" = "$default_hooks" ]; then
git config --unset core.hooksPath 2>/dev/null || true
fi
pre-commit install -t pre-commit -t commit-msg --overwrite >/dev/null 2>&1 || true