PHP Commit Hooks : Facilite la gestion des pré/post commit
Encore une contribution qui facilite la vie! Qafoo, une startup récemment fondée par les createurs de phpUnderControl, phpMD et phpDepend, vient de rajouter un autre projet a sa liste de projets open source PHP Commit Hooks, un framework facilite la création des pré et post commits.
Dans PCH, vous aurez a gerer des Vérificateurs “Checks” et des rapporteurs “Reporters”. Les vérificateurs vont implémenter par exemple des vérifications lint ou PHP_CodeSniffer. Les rapporteurs quand a eux, vont rapporter ces changements a l’utilisateur. Vous pourrez par exemple envoyer des mails de commit, ce qui simplifiera l’implémentation de votre installation de hooks.
Voici un exemple de creation d’un pré-commit :
require dirname( __FILE__ ) . '/../environment.php';
$runner = new pchRunner();
$runner->register( new pchLintCheck() );
$runner->register( new pchSvnKeywordsCheck( array(
'php' => array(
'svn:keywords' => array(
'Revision',
),
),
) ) );
$runner->setReporter( new pchReporterDispatcher( array(
new pchCliReporter(),
new pchExitCodeReporter(),
) ) );
$runner->run( new pchRepositoryTransaction( $argv[1], $argv[2] ) );
Dans cet exemple, nous enregistrons un Checker pour Lint et un Checker pour les mots clés de Subversion (pchSvnKeywordsCheck).
Si le hook de pré-commit se termine avec une valeur différente de zéro, SVN rejettera le code du commit et affichera le message reçu a l’utilisateur. Le Reporter pchCliReporter va retourner donc ce message a SVN et le Reporter pchExitCodeReporter retournera un code différent de zéro dans le cas d’échec.
Les post-commit
Concernant les Post-commits, les hooks sont appelés d’une façon asynchrone afin de pouvoir exécuter des taches d’une longue durée, ils rapporteront les resultats par la suite par mail. voici un exemple :
require dirname( __FILE__ ) . '/../environment.php';
$runner = new pchRunner();
$runner->register( new pchCodeSnifferCheck( 'Arbit' ) );
$runner->setReporter( new pchReporterDispatcher( array(
new pchMailReporter(
'postcommit@example.org', // Sender
'{user}@example.org', // Receiver
'Coding style violations' // Mail topic
),
new pchCommitMailReporter(
'{user}@example.org', // Sender
'list@example.org', // Reciever
'[SVN]' // Subject prefix
),
) ) );
$runner->run( new pchRepositoryVersion( $argv[1], $argv[2] ) );
Dans ce cas, on appelle un Checker PHP_CodeSniffer pour vérifier les fichiers nouvellement ajoutés, ou ceux modifiés. On enregistre deux rapporteurs, Un rapporteur de Mail qui enverra un mail au commiter ({user}@example.org), le second envoit le message a une mailing list.
Le projet est sous licence New BSD et il est disponible sur Github.