diff options
author | Johan Dahlin <johan@gnome.org> | 2010-08-17 15:52:03 -0300 |
---|---|---|
committer | Johan Dahlin <johan@gnome.org> | 2010-08-17 15:53:07 -0300 |
commit | 98ca5de2eeb098e5f256abd9938e5a40861b4f1e (patch) | |
tree | efb6ce615e29c9d9d437bf7b853f538d347fdcbb | |
parent | 8942500c99de223eff6f91677a5dff206e09b3a7 (diff) | |
download | gobject-introspection-98ca5de2eeb098e5f256abd9938e5a40861b4f1e.tar.gz |
Add a pre-commit hook and enforce it
-rw-r--r-- | Makefile.am | 4 | ||||
-rwxr-xr-x | misc/pre-commit | 70 |
2 files changed, 74 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am index 98016cd4..1c09fbb8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -41,6 +41,10 @@ upload-release: $(distdir).tar.gz ssh gnome.org install-module $(distdir).tar.gz check-local: + @test -f .git/hooks/pre-commit || (echo -e "ERROR: missing \ + pre-commit hook.\n\ncopy misc/pre-commit to .git/hooks"; false) + @test -x .git/hooks/pre-commit || (echo -e "ERROR: pre-commit \ + is not executable\n\nrun chmod +x .git/hooks/pre-commit"; false) @echo " PEP-8 INQUISITION" @find $(top_srcdir)/giscanner -name \*.py | sort | uniq | xargs $(PYTHON) $(top_srcdir)/misc/pep8.py --repeat --exclude=config.py @echo " CHECK Pyflakes" diff --git a/misc/pre-commit b/misc/pre-commit new file mode 100755 index 00000000..b25dce6b --- /dev/null +++ b/misc/pre-commit @@ -0,0 +1,70 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# 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. +# +# 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. + +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 (/^([<>])\1{6} |^={7}$/) { + bad_line("unresolved merge conflict", $_); + } + } + } + exit($found_bad); +' |