aboutsummaryrefslogtreecommitdiff
path: root/bin/nocheckin
blob: 8f3779b8a989179ecd4a86d9867b61c8ef6d1e36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/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" # <filename>: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