NAME
perlcritic-checker.pl - Tool for automating code quality control
SYNOPSIS
perlcritic-checker.pl [options]
Options:
--revision|-r Revision ID
--transaction|-t Transaction ID
--repository|-p Path to SVN repository
--config|-c Path to config file
--help|-? Show brief help message
--man Show full documentation
USAGE EXAMPLE
Put this into your Subversion's pre-commit hook:
/abs/path/to/perlcritic-checker.pl -p $REPOS -c /abs/path/to/perlcritic-checker.conf -t $TXN || exit 1
DESCRIPTION
This script checks Perl code using Perl::Critic module. It is assumed that it will be invoked from Subversion's pre-commit hook. This way you can fine tune and automate code quality control.
CONFIGURATION FILE
Configuration file example follows. In fact, it's a ordinary Perl hash. You can check it using `perl -c' to avoid syntax errors.
{
# Progressive mode: {0|1}. In progressive mode perlcritic-checker
# doesn't complains about existing violations but prevents
# introducing new ones. Nice feature for applying Perl::Critic
# to the existing projects gradually.
progressive_mode => 1,
# Emergency commits: {0|1}. There are situations when you *do* need
# to commit changes bypassing all checks (e.g. emergency bug fixes).
# This featue allows you bypass Perl::Critic using "magic" prefix in
# comment message, e.g.: svn ci -m "NO CRITIC: I am in hurry" FooBar.pm
allow_emergency_commits => 1,
# Magic prefix described above can be customized:
emergency_comment_prefix => 'NO CRITIC',
# Limit maximal number of reported violations. This parameter works
# differently in strict and progressive modes. In strict mode it
# will truncate long list of violations: only N most severe violations
# will be shown. In progressive mode such behaviour has no sense,
# that's why user will be asked to run perlcritic locally.
#
# In fact, this parameter is a workaround for a subtle bug in generic
# svn-client that happens when svn hook (i.e. perlcritic-checker.pl)
# outputs too much data: svn-client just reports "Connection closed
# unexpectedly". In order to reproduce this bug several additional
# conditions should be met:
# - repository access scheme: 'svn://' (svnserve daemon)
# - client and server on different machines
# - svn-client and -server are running on linux
#
# If you face the same problem, try to use the option below.
#max_violations => 50,
# SVN repository path -- to -- Perl::Critic's profile mapping.
#
# This feature allows you to apply different Perl::Critic's
# policies for different paths in the repository. For example,
# you can be very strict with brand-new projects, make an
# indulgence for some existing project and completely disable
# checking of auto-generated or third-party code.
#
# Each modified (added, updated, copied, moved) file name in the
# repository is matched against a sequence of patterns below.
# Keep in mind, *last* matching rule - wins.
#
# Profile paths can be either absolute or relative. In the later
# case they will be mapped under $REPOS/hooks/perlcritic.d directory.
profiles => [
# Apply default profile for all Perl-code under 'project_name/trunk'
{
pattern => qr{project_name/trunk/.*?[.](pm|pl|t)$},
profile => 'default-profile.conf',
},
# Disable checking of autogenerated Perl-code
{
pattern => qr{autogenerated-script[.]pl$},
profile => undef,
},
],
}
Format of Perl::Critic's profiles is described in perlcritic(1p). Here is an example:
# Make perlcritic very exacting
severity = brutal
# You can choose any level from 1 to 11, but 8 is recommended
verbose = 8
# Colorize violations depending on their severity level
color = 1
# Halt if this file contains errors
profile-strictness = fatal
# Ask perlcritic for a little indulgence
exclude = Documentation
# Explicitly set full path to Perl::Tidy's config
[CodeLayout::RequireTidyCode]
perltidyrc = /etc/perltidyrc
EXIT STATUS
0 - No code violations found, allow commit
1 - Code violations have been found, deny commit
255 - Error has occured, deny commit
SEE ALSO
http://perlcritic.com
AUTHOR
Alexander Simakov, <xdr (dot) box (at) Google Mail>
http://alexander-simakov.blogspot.com/
http://code.google.com/p/perlcritic-checker
LICENSE AND COPYRIGHT
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.