Hack #9. Automate Checkin Code Reviews
Let Perl::Tidy be your first code review—on every Subversion checkin!
In a multideveloper project, relying on
developers to follow the coding standards without fail and to run perltidy against all of their code ("Enforce Local Style" [Hack #7]) before every checkin is unrealistic, especially because this is tedious work. Fortunately, this is an automatable process. If you use Subversion (or Svk), it's easy to write a hook that checks code for tidiness, however you define it.
The Hack
Tip
For various reasons, it's not possible to manipulate the committed files with a pre-commit hook in Subversion. That's why this is a hack.
Within your Subversion repository, copy the hooks/post-commit.tmpl file to hooks/post-commit—unless you already have the file. Remove all code that runs other commands (again, unless you're already using it). Add a single line:
perl /usr/local/bin/check_tidy_file.pl "$REPOS" "$REV"
Adjust the file path appropriately. Make the hooks/post-commit file executable with chmod +x on Unix.
Finally, save the check_tidy_file.pl program to the path you used in the file. The program is:
#!/usr/bin/perl
use strict;
use warnings;
use Perl::Tidy;
use File::Temp; use File::Spec::Functions; my $svnlook = '/usr/bin/svnlook'; my $diff = '/usr/bin/diff -u'; # eat the arguments so as not to confuse Perl::Tidy my ($repo, $rev) = @ARGV; @ARGV = ( ); my @diffs; for my $changed_file (get_changed_perl_files( $repo, $rev )) { my $source = get_revision( ...