#!/bin/bash # Author: xezrunner (github.com/xezrunner) # Credit: DustinGadal on r/Jai # https://www.reddit.com/r/Jai/comments/jp0vjy/nocheckin_behavior_in_gitsourcetree/gbfhzd1/ # Required programs/utilities for default behavior (as-is): # git, grep, xargs # This pre-commit hook/script checks for the existence of the word "$SEARCH_TARGET" # in your *staged* source files, then aborts the commit if any matches were found. # It also shows where you have them inside the file. SEARCH_TARGET="nocheckin" CL_BRED='\e[1;31m' CL_NONE='\e[0m' MESSAGE_0="${CL_BRED}Error:${CL_NONE} $SEARCH_TARGET(s) were found in " MESSAGE_1="file(s) - ${CL_BRED}ignoring commit:${CL_NONE}" _=$(git status) if [ $? -ne 0 ]; then exit 1; fi SEARCH_CMD="git diff --staged -i --diff-filter=d --name-only -G $SEARCH_TARGET --relative $PWD" GREP_CMD="grep -H $SEARCH_TARGET -n --color=always" # :line****** # Get the amount of files that we found the search target in. # I use 'wc -l' (line count of command output) for this: STATUS=$($SEARCH_CMD | wc -l) if ((STATUS > 0)); then echo -e $MESSAGE_0 $STATUS $MESSAGE_1; ($SEARCH_CMD | xargs $GREP_CMD); exit 1; fi