NAME perlcritic-checker.pl - Perl::Critic Subversion Hook 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 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: * you can specify different Perl::Critic's profiles for different paths in your repository * you can bypass checks when you do need this * you can apply the checker to your existing large legacy Perl project by using "progressive mode" feature: in progressive mode perlcritic-checker doesn't complain about existing violations but prevents introducing new ones * perlcritic-checker comes with a test suite 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, 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.