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( ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access