diff --git a/scripts/git-hook-template.sh b/scripts/git-hook-template.sh index 1fd07dce..189b6674 100644 --- a/scripts/git-hook-template.sh +++ b/scripts/git-hook-template.sh @@ -1,11 +1,11 @@ #! /usr/bin/env bash set -euo pipefail -readonly HOOK_NAME="$(basename "$0")" +readonly HOOK="${HOOK:-$(basename "$0")}" -if ! [[ "$HOOK_NAME" =~ ^(pre-(commit|push)|post-checkout)$ ]] +if ! [[ "$HOOK" =~ ^(pre-(commit|push)|post-checkout)$ ]] then - echo "Unknown hook '${HOOK_NAME}'." + echo "Unknown hook '${HOOK}'." exit 1 fi @@ -18,7 +18,8 @@ mapfile -t CHANGED_FILES < <(comm -12 \ <(IFS=$'\n'; echo "${SENSITIVE_FILES[*]}" | sort) \ ) -if [ ${#CHANGED_FILES[@]} -gt 0 ]; then +if [ ${#CHANGED_FILES[@]} -gt 0 ] +then echo "⚠️ WARNING: Sensitive files have been modified relative to $BASE_BRANCH." echo "Executing this hook may run arbitrary code from the modified files." echo "" @@ -28,26 +29,17 @@ if [ ${#CHANGED_FILES[@]} -gt 0 ]; then # Read from /dev/tty because stdin is not attached to the terminal in Git hooks. exec < /dev/tty - read -r -p "⚠️ Do you want to continue executing the '${HOOK_NAME}' hook? [y/N] " response + read -r -p "⚠️ Do you want to continue executing the '${HOOK}' hook? [y/N] " response case "$response" in [yY][eE][sS]|[yY]) - echo "Continuing with '${HOOK_NAME}' hook..." + echo "Continuing with '${HOOK}' hook…" ;; *) - echo "Skipping '${HOOK_NAME}' hook." + echo "Skipping '${HOOK}' hook." exit 0 ;; esac fi -# Execute the appropriate just recipe based on the hook name -if [ "$HOOK_NAME" = "pre-commit" ]; then - just pre-commit -elif [ "$HOOK_NAME" = "pre-push" ]; then - just pre-push -elif [ "$HOOK_NAME" = "post-checkout" ]; then - just post-checkout -else - echo "⚠️ Unknown hook: $HOOK_NAME" - exit 1 -fi +just "$HOOK" +