#!/bin/sh
#
# An example hook script to verify what is about to be committed.
-# Called by git-commit-script with no arguments. The hook should
+# Called by git-commit with no arguments. The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# 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.
+
+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 $fh;
my $found_bad = 0;
my $filename;
my $reported_filename = "";
sub bad_line {
my ($why, $line) = @_;
if (!$found_bad) {
- print "*\n";
- print "* You have some suspicious patch lines:\n";
- print "*\n";
+ print STDERR "*\n";
+ print STDERR "* You have some suspicious patch lines:\n";
+ print STDERR "*\n";
$found_bad = 1;
}
if ($reported_filename ne $filename) {
- print "* In $filename\n";
+ print STDERR "* In $filename\n";
$reported_filename = $filename;
}
- print "* $why (line $lineno)\n";
- print "$filename:$lineno:$line\n";
+ print STDERR "* $why (line $lineno)\n";
+ print STDERR "$filename:$lineno:$line\n";
}
- open $fh, "-|", qw(git-diff-cache -p -M --cached HEAD);
- while (<$fh>) {
+ while (<>) {
if (m|^diff --git a/(.*) b/\1$|) {
$filename = $1;
next;
if (/\s$/) {
bad_line("trailing whitespace", $_);
}
- if (/^\s* /) {
+ if (/^\s* \t/) {
bad_line("indent SP followed by a TAB", $_);
}
+ if (/^([<>])\1{6} |^={7}$/) {
+ bad_line("unresolved merge conflict", $_);
+ }
}
}
exit($found_bad);
'
-