# Check if every added/changed Java file passes our code quality
# standards.
PRE_COMMIT {
my ($svnlook) = @_;
# CONFIG: Uncomment the following return to disable all checks
# return;
use autodie qw(:all);
use Cwd;
use File::Temp;
use IO::Handle;
my @javas = grep {/\.java$/} ($svnlook->added(), $svnlook->updated());
return unless @javas;
# CONFIG: Set $limit to 0 to have no limits on the number of files to be checked.
if (my $limit = 10) {
splice @javas, $limit if @javas > $limit;
}
# Create a copy of each java file in a temporary directory.
my $dir = File::Temp->newdir();
foreach my $java (@javas) {
(my $file = $java) =~ tr:/:_:; # flaten the java file name
open my $fh, '>', "$dir/$file";
$fh->print($svnlook->cat($java));
}
my $cwd = cwd();
chdir '/ha/subversion/admin/hooks/dsb';
# Invoke the code quality tool on all saved java files
system('java', '-jar', 'code-quality-hook-1.0-SNAPSHOT.jar', glob("$dir/*.java"));
chdir $cwd;
};
1;