X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=build%2Fgit%2Fpre-commit;h=8153c35ecaf96c52e2217780718e914cf1406cfc;hb=39b28bffc195348b93294b5fa0a8b9e87ea7317a;hp=5b112663dfb062be08359a05f02dd67eb54ae8ad;hpb=298b62e07bb2092fafff5c73c8c5d87611697ced;p=libucw.git diff --git a/build/git/pre-commit b/build/git/pre-commit old mode 100644 new mode 100755 index 5b112663..8153c35e --- a/build/git/pre-commit +++ b/build/git/pre-commit @@ -1,100 +1,80 @@ -#!/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. +#!/usr/bin/perl -# 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. +my $found_bad = 0; +my $filename; +my $reported_filename = ""; +my $lineno; -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; - my @sh_checks; - sub bad_line { +if (scalar @ARGV > 0) { + my $f; + foreach $f (@ARGV) { + check_file($f); + } +} else { + exit(0) if (system("git-rev-parse --verify HEAD 2>/dev/null")); + open(PATCH, "git-diff-index -p -M --cached HEAD --|") || + die("git-diff-index failed"); + while () { + check_file($1) if (m|^diff --git a/(.*\.[ch]) b/\1$|); + } + close(PATCH); + +} +exit($found_bad); + +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; + 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 "* In $filename\n"; + $reported_filename = $filename; } - print STDERR "* $why ($filename:$lineno)\n"; + print STDERR "* \t$why\n"; print STDERR "$lineno:$line\n" if ($line); - } - sub sh_check { +} + + +sub check_file { + ($filename) = @_; open(IN, "$filename") || die ("Cannot open $filename"); my $has_loc = 0; my $has_glob = 0; my $has_copy = 0; my $empty = 0; - $lineno = 0; + $lineno = 1; while() { - if (/^\s*\#include\s+"/) { - bad_line("sherlock includes after global includes", $_) if (!$has_loc && $has_glob); - $has_loc++; - } - $has_glob++ if (/^\s*\#include\s+\])\1{6} |^={7}$/) { + bad_line("unresolved merge conflict", $_); + } + + $has_glob++ if (/^\s*\#include\s+\) { - if (m|^diff --git a/(.*) b/\1$|) { - $filename = $1; - push (@sh_checks, $filename) if ($filename =~ /\.[ch]$/); - 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 (/^\s*\#define\s+LOCAL_DEBUG/) { - # bad_line("LOCAL_DEBUG in commit", $_); - #} - if (/^([<>])\1{6} |^={7}$/) { - bad_line("unresolved merge conflict", $_); - } - } - } - foreach $filename (@sh_checks) { - sh_check(); - } - exit($found_bad); -' +} + +