Files
Battle-for-Tismo/scripts/install-git-hooks.sh
T
2026-09-16 19:59:18 +02:00

43 lines
1.4 KiB
Bash
Executable File

#!/bin/sh
# Install the versioned git hooks for this repository by pointing core.hooksPath
# at the githooks directory. This is a one-time, per-checkout setup:
#
# ./scripts/install-git-hooks.sh
#
# After this, every `git commit` runs the test suite first and aborts if it
# fails. Skip once with `git commit --no-verify`.
#
# Uninstall with:
# git config --unset core.hooksPath
set -e
PROJECT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
HOOKS_DIR="$PROJECT_DIR/githooks"
if [ ! -d "$HOOKS_DIR" ]; then
echo "error: hooks directory not found at $HOOKS_DIR" >&2
exit 1
fi
REPO_ROOT=$(git -C "$PROJECT_DIR" rev-parse --show-toplevel 2>/dev/null) || {
echo "error: $PROJECT_DIR is not inside a git repository." >&2
echo " Run 'git init' first, then re-run this script." >&2
exit 1
}
# Git only runs hooks that are executable.
chmod +x "$HOOKS_DIR"/*
# core.hooksPath is local (not committed), so each clone runs this once.
git -C "$REPO_ROOT" config core.hooksPath "$HOOKS_DIR"
echo "Installed git hooks from $HOOKS_DIR"
echo " repository: $REPO_ROOT"
echo " core.hooksPath $HOOKS_DIR"
if ! command -v node >/dev/null 2>&1 && command -v nix-shell >/dev/null 2>&1; then
echo " note: 'node' is not on PATH; the hook will fall back to 'nix-shell -p nodejs'."
fi
echo ""
echo "Every commit now runs the test suite. Skip once with: git commit --no-verify"