2010-03-29 52 views
8

Je voudrais vérifier le code commis à mon dépôt git distant avec PHP CodeSniffer et le rejeter s'il y a des normes de code de problèmes. Est-ce que quelqu'un a un exemple comment l'utiliser sur le dépôt à distance git ou peut-être exemple comment l'utiliser avec le crochet de pré-réception? Merci.Git pré-recevoir le crochet pour lancer PHP CodeSniffer

Répondre

3

Peut-être que ce point vous dans la bonne direction: (Orginal de: http://www.squatlabs.de/versionierung/arbeiten-git-hooks en allemand)

#!/usr/bin/php 
<?php 

$output = array(); 
$rc  = 0; 
exec('git rev-parse --verify HEAD 2> /dev/null', $output, $rc); 
if ($rc == 0) $against = 'HEAD'; 
else   $against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'; 

exec('git diff-index --cached --name-only '. $against, $output); 

$needle   = '/(\.php|\.module|\.install)$/'; 
$exit_status = 0; 

foreach ($output as $file) { 
     if (!preg_match($needle, $file)) { 
       // only check php files 
       continue; 
     } 

     $lint_output = array(); 
     $rc    = 0; 
     exec('php -l '. escapeshellarg($file), $lint_output, $rc); 
     if ($rc == 0) { 
       continue; 
     } 
     # echo implode("\n", $lint_output), "\n"; 
     $exit_status = 1; 
} 

exit($exit_status); 

Vous devrez modifier l'exécutif de ligne exec ('php -l ... pour pointer vers votre codesniffer . Installation

+0

malheureusement, il ne fonctionne pas avec pré-recevoir crochet :( – Ralphz

+0

Nop, vous devrez créer un pré-engagement sur le côté client, mais vous pouvez suivre la AFAIK, vous le serveur ne peut pas tester le contenu en poussant ... :( – FMaz008

3

Ok j'ai trouvé la solution :)

Ceci est une preuve de concept :) code pour crochet pré-recevoir:

#!/bin/bash 

while read old_sha1 new_sha1 refname; do 
    echo "ns: " $new_sha1; 
    echo "os: " $old_sha1; 

    echo "----" 

    git ls-tree -r $new_sha1 | cut -f 3 -d ' ' | cut -f 1 | while read file; do 
     git cat-file blob $file 
    done; 

    echo "----" 

done 

exit 1 

Cet exemple de code n'imprimera que les blobs reçus par le dépôt distant mais cela suffira pour que quelqu'un ait besoin de quelque chose comme ça (j'espère).

Vous pouvez mettre chaque blob dans une course de fichier temporaire que vous avez besoin sur ce fichier supprimer le fichier et ainsi de suite ...

+0

merci, cela a beaucoup aidé –

2

J'ai développé un crochet git pré-réception basé sur PHPCodeSniffer pour vérifier le style de code des fichiers PHP, JavaScript et CSS.

Mon script est disponible à partir Github: https://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook

+0

Pouvez-vous étendre votre réponse avec un exemple? Comme l'exemple bash dans une réponse ci-dessus? Donc, il est clair à partir de la réponse seule comment utiliser? – hakre