#!/bin/bash

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

# fail if we add any new lines to C or Scheme source containing a tab
if git diff --name-only "$against" | egrep -q '\.(cpp|h|scm|sld|stub)$' &&\
        git diff --name-only "$against" |\
        egrep '\.(cpp|h|scm|sld|stub)$' |\
        xargs -d'\n' git diff -U0 --no-color "$against" -- |\
        grep -q $'^+ *\t'; then
    echo "Error: Attempting to add a source file using tabs for indentation."
    echo
    echo -n "   "
    git diff --name-only "$against" |\
        egrep '\.(cpp|h|scm|sld|stub)$' |\
        xargs -d'\n' git diff -U0 "$against" -- |\
        grep $'^+ *\t' | head -1
    echo
    cat <<EOF
It's important for arguments to line up vertically to a precise column.
Since there is no standard tab width, using tabs for indentation makes
this impossible in general.  Please use spaces.
EOF
    exit 1
fi
