Now that "git diff --check" indicates problems with its exit code the pre-commit hook becomes a trivial one-liner. A side effect of this is that when "git diff --check" learns to detect problems according to core.whitespace in the future, the hook's behaviour will evolve to match without any changes required. Signed-off-by: Wincent Colaiuta <win@xxxxxxxxxxx> --- templates/hooks--pre-commit | 67 ++++-------------------------------------- 1 files changed, 7 insertions(+), 60 deletions(-) diff --git a/templates/hooks--pre-commit b/templates/hooks--pre-commit index 7092bae..f8c7be7 100644 --- a/templates/hooks--pre-commit +++ b/templates/hooks--pre-commit @@ -7,64 +7,11 @@ # # To enable this hook, make this file executable. -# This is slightly modified from Andrew Morton's Perfect Patch. -# Lines you introduce should not have trailing whitespace. -# Also check for an indentation that has SP before a TAB. +git-diff-index -M --cached --check HEAD -- && exit 0 -if git-rev-parse --verify HEAD 2>/dev/null -then - git-diff-index -p -M --cached HEAD -- -else - # NEEDSWORK: we should produce a diff with an empty tree here - # if we want to do the same verification for the initial import. - : -fi | -perl -e ' - my $found_bad = 0; - my $filename; - my $reported_filename = ""; - my $lineno; - sub bad_line { - my ($why, $line) = @_; - if (!$found_bad) { - print STDERR "*\n"; - print STDERR "* You have some suspicious patch lines:\n"; - print STDERR "*\n"; - $found_bad = 1; - } - if ($reported_filename ne $filename) { - print STDERR "* In $filename\n"; - $reported_filename = $filename; - } - print STDERR "* $why (line $lineno)\n"; - print STDERR "$filename:$lineno:$line\n"; - } - while (<>) { - if (m|^diff --git a/(.*) b/\1$|) { - $filename = $1; - next; - } - if (/^@@ -\S+ \+(\d+)/) { - $lineno = $1 - 1; - next; - } - if (/^ /) { - $lineno++; - next; - } - if (s/^\+//) { - $lineno++; - chomp; - if (/\s$/) { - bad_line("trailing whitespace", $_); - } - if (/^\s* \t/) { - bad_line("indent SP followed by a TAB", $_); - } - if (/^(?:[<>=]){7}/) { - bad_line("unresolved merge conflict", $_); - } - } - } - exit($found_bad); -' +cat >&2 <<EOF +fatal: commit aborted due to whitespace problems +specify --no-verify to bypass these checks and commit anyway +EOF + +exit 1 -- 1.5.3.7.1159.g2f071-dirty - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html