#!/bin/bash -e

echo "Running ${PWD}/$0"

# Create a script that diffs a staged file vs. the original, and looks for illegal
# tabs in new or modified lines
script=$(mktemp /tmp/check.XXXXXX)
trap "rm -f ${script}" EXIT
cat >${script} <<"EOF"
#!/bin/bash
diff --old-line-format= --unchanged-line-format= "$1" "$2" | grep -q $'\t' || exit
fn=$(basename "$2")
[ "$2" != "${2%%.java}" ] || [ "$2" != "${2%%.py}" ] || exit
echo "$2"
EOF
chmod +x ${script}

# Run the script on all staged files
badfiles=$(git difftool --staged -y -x ${script})

if [ "${badfiles}" ]; then
  echo "New or modified lines in the following files contain tab characters:"
  echo "${badfiles}" | sed "s/^/  /"
  echo "Please correct these problems and retry the commit."
  exit 1
fi

if git rev-parse --verify HEAD >/dev/null 2>&1
then
	against=HEAD
else
	# Initial commit: diff against an empty tree object
	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi

set +e
# If you want to allow non-ascii filenames set this variable to true.
allownonascii=$(git config hooks.allownonascii)
# Redirect output to stderr.
exec 1>&2

# Cross platform projects tend to avoid non-ascii filenames; prevent
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
	# Note that the use of brackets around a tr range is ok here, (it's
	# even required, for portability to Solaris 10's /usr/bin/tr), since
	# the square bracket bytes happen to fall in the designated range.
	test $(git diff --cached --name-only --diff-filter=A -z $against |
	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
	echo "Error: Attempt to add a non-ascii file name."
	echo
	echo "This can cause problems if you want to work"
	echo "with people on other platforms."
	echo
	echo "To be portable it is advisable to rename the file ..."
	echo
	echo "If you know what you are doing you can disable this"
	echo "check using:"
	echo
	echo "  git config hooks.allownonascii true"
	echo
	exit 1
fi

cfg_check_whitespace=$(git config hooks.checkwhitespace)

if [ -e .git/MERGE_MSG ]; then
    # this is a merge commit - default to no check
    if [[ $cfg_check_whitespace == "true" ]]; then
        check_whitespace=true
    else
        check_whitespace=false
    fi
else
    # this is not merge commit - default to check
    if [[ $cfg_check_whitespace != "false" ]]; then
        check_whitespace=true
    else
        check_whitespace=false
    fi
fi

if ! git diff --cached --name-only | grep -q -E '\.(java|c|h|yaml|yang|json|sh|xsl|py)$'; then
    echo "No source files found in commit - skipping whitespace check"
    check_whitespace=false
fi

if [[ $check_whitespace == "true" ]]; then
    # If there are whitespace errors, print the offending file names and fail.
    rv=0
    exec git diff-index --check --cached $against
fi
