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, rename this file to "pre-commit". 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 14if git-rev-parse --verify HEAD 2>/dev/null 15then 16 git-diff-index -p -M --cached HEAD -- 17else 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: 21fi| 22perl -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_filenamene$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*\t/) { 62 bad_line("indent SP followed by a TAB",$_); 63 } 64 if (/^([<>])\1{6} |^={7}$/) { 65 bad_line("unresolved merge conflict",$_); 66 } 67 } 68 } 69 exit($found_bad); 70'