PHP Commit Hooks : Facilite la gestion des pré/post commit

0

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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.

Partager :
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Live
  • MSN Reporter
  • Netvibes
  • Technorati
  • Twitter
  • Yahoo! Bookmarks
  • LinkedIn
  • DZone
  • viadeo FR

Leave a Reply

© 2011 Anis Berejeb. All rights reserved.
Proudly designed by Theme Junkie.