diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2011-08-16 00:37:26 -0500 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2011-08-16 00:37:48 -0500 |
commit | 262b5931c8975e90037f635d7b2ecfd198a0803a (patch) | |
tree | 4fb73ef7abf33de6a7ead63b3ef55f2b3c574cad /git-hooks | |
parent | 04d2e6469529b6187900659517d6f6dd5ea2cca5 (diff) |
put git hook on a diet. concentrate on safe, cheap and globally useful
Diffstat (limited to 'git-hooks')
-rwxr-xr-x | git-hooks/pre-commit | 125 |
1 files changed, 32 insertions, 93 deletions
diff --git a/git-hooks/pre-commit b/git-hooks/pre-commit index d262fe108916..cdf6e44eaf91 100755 --- a/git-hooks/pre-commit +++ b/git-hooks/pre-commit @@ -6,23 +6,24 @@ # if it wants to stop the commit. use strict; -use File::Temp qw/ :mktemp /; -use File::Copy; -use Cwd; +#use File::Copy; +#use Cwd; $ENV{LC_ALL} = "C"; -sub check_whitespaces($$) +sub check_whitespaces($) { - my ($h, $src_exts) = @_; + my ($h) = @_; + my $src_limited = "c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|MK|pmk|pl|pm|sdi|sh|src|tab|xcu|xml"; + my $src_full = "c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|mk|MK|pmk|pl|pm|sdi|sh|src|tab|xcu|xml"; my $found_bad = 0; my $filename; my $reported_filename = ""; my $lineno; sub bad_line { - my ($why, $line) = @_; - if ($filename =~ /\.($src_exts)$/) { + my ($why, $line, $file_filter) = @_; + if (!defined $file_filter || $filename =~ /\.($file_filter)$/) { if (!$found_bad) { print STDERR "*\n"; print STDERR "* You have some suspicious patch lines:\n"; @@ -55,13 +56,13 @@ sub check_whitespaces($$) $lineno++; chomp; if (/\s$/) { - bad_line("trailing whitespace", $_); + bad_line("trailing whitespace", $_ , $src_limited); } if (/^\s* /) { - bad_line("indent SP followed by a TAB", $_); + bad_line("indent SP followed by a TAB", $_, $src_limited); } - if (/^(?:[<>=]){7}/) { - bad_line("unresolved merge conflict", $_); + if (/^(?:[<>=]){7}$/) { + bad_line("unresolved merge conflict", $src_full); } } } @@ -93,35 +94,35 @@ if ( $allownonascii ne "true" && LC_ALL=C tr -d '[ -~]\\0'` ne "" ) { print <<EOM; -Error: Attempt to add a non-ascii file name." +Error: Attempt to add a non-ascii file name. -This can cause problems if you want to work" -with people on other platforms." +This can cause problems if you want to work +with people on other platforms. -To be portable it is advisable to rename the file ..." +To be portable it is advisable to rename the file ... -If you know what you are doing you can disable this" -check using:" +If you know what you are doing you can disable this +check using: - git config hooks.allownonascii true" + git config hooks.allownonascii true EOM exit( 1 ); } # check for missing doxygen comments in new files -my $doxycheck = "../../bin/find-undocumented-classes"; -if (! -e $doxycheck) { - # bootstrap repo - $doxycheck =~ s|../../||; -} -open(FILES, "git diff-index --cached --name-only --diff-filter=A $against |") || die "Cannot run git diff-index."; -while (my $file = <FILES>) { - chomp($file); - if ($file =~ /\.hxx$/) { - system("$doxycheck -q $file | sed 's|".getcwd()."/||;'"); - } -} +#my $doxycheck = "../../bin/find-undocumented-classes"; +#if (! -e $doxycheck) { +# # bootstrap repo +# $doxycheck =~ s|../../||; +#} +#open(FILES, "git diff-index --cached --name-only --diff-filter=A $against |") || die "Cannot run git diff-index."; +#while (my $file = <FILES>) { +# chomp($file); +# if ($file =~ /\.hxx$/) { +# system("$doxycheck -q $file | sed 's|".getcwd()."/||;'"); +# } +#} # run 'msgcat --nowrap' when committing *.po files open(FILES, "git diff-index --cached --name-only $against |") || die "Cannot run git diff-index."; @@ -133,70 +134,8 @@ while (my $file = <FILES>) { } } -# be strict about tabs - we don't want them at all, setup your editor -# correctly ;-) -my $err_ext = ""; -my $src_exts = "c|cpp|cxx|h|hrc|hxx|idl|inl|java|map|MK|pmk|pl|pm|sdi|sh|src|tab|xcu|xml"; - -open( FILES, "git diff-index --cached --name-only $against |" ) || die "Cannot run git diff-index."; -while ( my $file = <FILES> ) { - chomp( $file ); - if ( $file ne "GNUmakefile" && - $file =~ /\.($src_exts)$/) { - open( F, "git diff-index -p --cached $against -- '$file' |" ); - while ( my $line = <F> ) { - if ( $line =~ /^\+ *\t/ ) { - $err_ext .= "$file\n"; - last; - } - } - } - close( F ); -} -close( FILES ); - -if ( $err_ext ne "" ) { - print <<EOM; -Error: Your change in the following files introduces tabs in indentation: - -$err_ext -Please setup your editor not to use tabs, fix the files, and try again. -We have had enough trouble with tabs in the past :-( - -EOM - exit( 1 ); -} - -# check for old licenses -my $check_licenses='^+.*\(Sun Industry Standards Source License Version\|GNU Lesser General Public License Version 2.1\)'; -my $err_licenses=`git diff-index --cached --name-only $against | while read FILE ; do \ - if git diff-index -p --cached $against -- "\$FILE" | grep -qs "$check_licenses" ; then \ - echo "\$FILE" \ - fi \ - done`; -chomp( $err_licenses ); -if ( $err_licenses ne "" && $err_licenses ne "git-hooks/pre-commit" ) { - print <<EOM; -Error: Your change in the following files introduces old licenses: - -$err_licenses - -Please check with the author(s) that they agree with upgrading the -license to LGPL3, and change the license accondingly. - -EOM - exit( 1 ); -} - # fix whitespace in code -check_whitespaces( $against, $src_exts ); - -# check the rest of the files -my $filter_patches=`git diff-index --check --cached $against -- | sed '/\.\(diff\|patch\):/,/.*/d'`; -chomp( $filter_patches ); -if ( $filter_patches ne "" ) { - print "WARNING:\n\n$filter_patches\n"; -} +check_whitespaces( $against); # all OK exit( 0 ); |