Tada
This commit is contained in:
44
.githooks/pre-commit
Executable file
44
.githooks/pre-commit
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/bin/sh
|
||||
# Global pre-commit hook: print effective identity and ask to continue.
|
||||
# Set BYPASS_COMMIT_IDENTITY_CHECK=1 to skip (e.g., in CI).
|
||||
|
||||
[ -n "$BYPASS_COMMIT_IDENTITY_CHECK" ] && exit 0
|
||||
|
||||
# Resolve effective identity (prefer repo-local config, fall back to global)
|
||||
name="$(git config --get user.name)"
|
||||
[ -z "$name" ] && name="$(git config --global --get user.name)"
|
||||
email="$(git config --get user.email)"
|
||||
[ -z "$email" ] && email="$(git config --global --get user.email)"
|
||||
|
||||
branch="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo '?')"
|
||||
remote="$(git remote -v | awk '/\(push\)/{print $2; exit}' | sed 's#^https\?://##; s#git@##' )"
|
||||
|
||||
# Optional: block specific identities unless overridden
|
||||
# Add your alt(s) here, comma-separated (exact match on email or name).
|
||||
BLOCKED_EMAILS="${BLOCKED_EMAILS:-alt@example.com}"
|
||||
BLOCKED_NAMES="${BLOCKED_NAMES:-Alt Name}"
|
||||
|
||||
is_blocked() {
|
||||
needle="$1" haystack="$2"
|
||||
printf '%s' "$haystack" | tr ',' '\n' | grep -Fxq "$needle"
|
||||
}
|
||||
|
||||
printf '\n\033[1;33m⚠ Committing as:\033[0m \033[1m%s\033[0m <\033[1m%s\033[0m>\n' "$name" "$email"
|
||||
[ -n "$branch" ] && printf ' Branch: %s\n' "$branch"
|
||||
[ -n "$remote" ] && printf ' Remote: %s\n' "$remote"
|
||||
printf ' Double-check this is the right account.\n\n'
|
||||
|
||||
if is_blocked "$email" "$BLOCKED_EMAILS" || is_blocked "$name" "$BLOCKED_NAMES"; then
|
||||
printf '\033[1;31mBlocked identity detected.\033[0m Set BYPASS_COMMIT_IDENTITY_CHECK=1 to override just this commit.\n'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Interactive confirm (skip if no TTY, e.g., merge drivers)
|
||||
if [ -t 0 ]; then
|
||||
printf 'Continue with commit? [y/N] '
|
||||
read ans
|
||||
case "$ans" in
|
||||
y|Y) ;;
|
||||
*) echo "Commit aborted."; exit 1 ;;
|
||||
esac
|
||||
fi
|
||||
Reference in New Issue
Block a user