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.

Anis Berejeb

Anis est avant tout un passioné de l'agilité et du développement. Avec plus de 15 ans dans le domaine du développement web, son expertise combine des connaissances accrues dans l'ensemble des notions partant du développement logiciel jusqu'à l'organisation des équipes dans les environnements agiles à grande échelle.

You may also like...