#!/usr/bin/env bash # setup-hooks.sh — install this repo's git hooks. # # Mechanism: copy scripts/pre-commit and scripts/pre-push into .git/hooks/ and # make them executable. This is the most portable pattern (works on any clone, # no `git config core.hooksPath` mutation, survives config resets, idempotent). # # Run once after cloning: bash scripts/setup-hooks.sh set -euo pipefail HERE="$(cd "$(dirname "$0")" && pwd)" # shellcheck disable=SC1091 source "$HERE/lib/common.sh" REPO_ROOT="$(repo_root)" cd "$REPO_ROOT" [ -d .git ] || die "no .git directory here — run this from a git checkout" HOOKS_DIR=".git/hooks" HOOK_NAMES="pre-commit pre-push" log_step "Installing git hooks" for name in $HOOK_NAMES; do src="scripts/$name" dst="$HOOKS_DIR/$name" [ -f "$src" ] || die "source hook not found: $src" cp "$src" "$dst" chmod +x "$dst" log_ok "installed $dst" done cat <