355
|
1 #!/bin/sh
|
|
2 #
|
|
3 # An example hook script to verify what is about to be committed.
|
|
4 # Called by git-commit with no arguments. The hook should
|
|
5 # exit with non-zero status after issuing an appropriate message if
|
|
6 # it wants to stop the commit.
|
|
7 #
|
|
8 # To enable this hook, make this file executable.
|
|
9
|
|
10 # This is slightly modified from Andrew Morton's Perfect Patch.
|
|
11 # Lines you introduce should not have trailing whitespace.
|
|
12 # Also check for an indentation that has SP before a TAB.
|
|
13
|
|
14 if git-rev-parse --verify HEAD 2>/dev/null
|
|
15 then
|
|
16 git-diff-index -p -M --cached HEAD
|
|
17 else
|
|
18 # NEEDSWORK: we should produce a diff with an empty tree here
|
|
19 # if we want to do the same verification for the initial import.
|
|
20 :
|
|
21 fi |
|
|
22 perl -e '
|
|
23 my $found_bad = 0;
|
|
24 my $filename;
|
|
25 my $reported_filename = "";
|
|
26 my $lineno;
|
|
27 sub bad_line {
|
|
28 my ($why, $line) = @_;
|
|
29 if (!$found_bad) {
|
|
30 print STDERR "*\n";
|
|
31 print STDERR "* You have some suspicious patch lines:\n";
|
|
32 print STDERR "*\n";
|
|
33 $found_bad = 1;
|
|
34 }
|
|
35 if ($reported_filename ne $filename) {
|
|
36 print STDERR "* In $filename\n";
|
|
37 $reported_filename = $filename;
|
|
38 }
|
|
39 print STDERR "* $why (line $lineno)\n";
|
|
40 print STDERR "$filename:$lineno:$line\n";
|
|
41 }
|
|
42 while (<>) {
|
|
43 if (m|^diff --git a/(.*) b/\1$|) {
|
|
44 $filename = $1;
|
|
45 next;
|
|
46 }
|
|
47 if (/^@@ -\S+ \+(\d+)/) {
|
|
48 $lineno = $1 - 1;
|
|
49 next;
|
|
50 }
|
|
51 if (/^ /) {
|
|
52 $lineno++;
|
|
53 next;
|
|
54 }
|
|
55 if (s/^\+//) {
|
|
56 $lineno++;
|
|
57 chomp;
|
|
58 if (/\s$/) {
|
|
59 bad_line("trailing whitespace", $_);
|
|
60 }
|
|
61 if (/^\s* /) {
|
|
62 bad_line("indent SP followed by a TAB", $_);
|
|
63 }
|
|
64 if (/^(?:[<>=]){7}/) {
|
|
65 bad_line("unresolved merge conflict", $_);
|
|
66 }
|
|
67 }
|
|
68 }
|
|
69 exit($found_bad);
|
|
70 '
|
|
71
|