summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-06-26 16:08:05 -0700
committerJunio C Hamano <gitster@pobox.com>2008-06-26 22:08:25 -0700
commit03e2b630f05b88da5ff43f194fed25755de44e8b (patch)
treeb69205339b6dc8aa9149a1757579fc1c4de0106d
parent049540435fa5f7f583b8f5af257322b17eac7375 (diff)
downloadgit-03e2b630f05b88da5ff43f194fed25755de44e8b.tar.gz
Update sample pre-commit hook to use "diff --check"
Now "diff --check" can detect not just whitespace errors but also notices leftover conflict marker lines, we can use it in the sample pre-commit hook script. These days the object layer knows about the empty tree object without actually having one in the repository, so we can run the test even for the initial commit. Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xtemplates/hooks--pre-commit.sample64
1 files changed, 6 insertions, 58 deletions
diff --git a/templates/hooks--pre-commit.sample b/templates/hooks--pre-commit.sample
index 71c10f25f4..0e49279c7f 100755
--- a/templates/hooks--pre-commit.sample
+++ b/templates/hooks--pre-commit.sample
@@ -7,64 +7,12 @@
#
# To enable this hook, rename this file to "pre-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 --
+ against=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 (/^([<>])\1{6} |^={7}$/) {
- bad_line("unresolved merge conflict", $_);
- }
- }
- }
- exit($found_bad);
-'
+ # Initial commit: diff against an empty tree object
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+exec git diff-index --check --cached $against --