Alexander Simakov > perlcritic-checker >


Annotate this POD

View/Report Bugs

NAME ^ - Perl::Critic Subversion Hook

SYNOPSIS ^ [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


Put this into your Subversion's pre-commit hook:

/abs/path/to/ -p $REPOS -c /abs/path/to/perlcritic-checker.conf -t $TXN || exit 1


perlcritic-checker is a subversion hook that allows commits to go through if and only if the code passes validation using Perl::Critic module. This way you can apply consistent coding practices inside your team.

Main features:


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"
     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.
     # 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
 perltidyrc = /etc/perltidyrc


0 - No code violations found, allow commit

1 - Code violations have been found, deny commit

255 - Error has occured, deny commit



Alexander Simakov, <xdr (dot) box (at) Google Mail>


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.

syntax highlighting: