You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.7 KiB
80 lines
1.7 KiB
#!/usr/bin/perl
|
|
|
|
my $found_bad = 0;
|
|
my $filename;
|
|
my $reported_filename = "";
|
|
my $lineno;
|
|
|
|
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 (<PATCH>) {
|
|
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;
|
|
}
|
|
if ($reported_filename ne $filename) {
|
|
print STDERR "* In $filename\n";
|
|
$reported_filename = $filename;
|
|
}
|
|
print STDERR "* \t$why\n";
|
|
print STDERR "$lineno:$line\n" if ($line);
|
|
}
|
|
|
|
|
|
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 = 1;
|
|
while(<IN>) {
|
|
chomp;
|
|
if (/^\s*\#include\s+"/) {
|
|
bad_line("sherlock includes after global includes", $_) if (!$has_loc && $has_glob);
|
|
$has_loc++;
|
|
}
|
|
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 left enabled", $_);
|
|
}
|
|
if (/^([<>])\1{6} |^={7}$/) {
|
|
bad_line("unresolved merge conflict", $_);
|
|
}
|
|
|
|
$has_glob++ if (/^\s*\#include\s+\</);
|
|
$has_copy++ if (/\([Cc]\)\s*\w/);
|
|
$empty = $_ =~ /^\s*$/;
|
|
$lineno++;
|
|
}
|
|
bad_line("empty lines at end of input") if ($empty);
|
|
bad_line("missing copyright") if (!$has_copy);
|
|
close(IN);
|
|
}
|
|
|
|
|
|
|