2010-03-29 14 views
8

Mi piacerebbe controllare il codice impegnato nel mio repository git remoto con PHP CodeSniffer e rifiutarlo se ci sono problemi con gli standard di codice. Qualcuno ha un esempio su come usarlo su git repository remoto o magari ad esempio come usarlo con il gancio di pre-ricezione? Grazie.Git pre-receive per lanciare PHP CodeSniffer

risposta

3

Forse questo ti punto nella giusta direzione: (Orginal da: http://www.squatlabs.de/versionierung/arbeiten-git-hooks in tedesco)

#!/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); 

Si dovrà modificare la riga exec exec ('php -l ... per puntare al tuo codesniffer . installazione

+0

purtroppo non funziona con pre-ricevere gancio :( – Ralphz

+0

Nop, dovrete creare un pre-commit sul lato client, ma è possibile seguire il AFAIK, il server non può testare il contenuto quando si spinge ... :( – FMaz008

3

Ok ho trovato la soluzione :)

si tratta di codice di prova :) per il pre-ricezione gancio:

#!/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 

Questo codice di esempio stamperà solo i BLOB ricevuti dal repository remoto, ma è sufficiente per far sì che qualcuno abbia bisogno di qualcosa del genere (spero).

È possibile inserire tutti i blob in un certo periodo di file temporanei tutto ciò che serve su questo file eliminare il file e così via ...

+0

grazie, questo ha aiutato molto –

2

ho sviluppato un gancio git pre-ricezione basato su PHPCodeSniffer per verificare lo stile del codice dei file PHP, JavaScript e CSS.

mio script è disponibile da Github: https://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook

+0

Puoi estendere la tua risposta con un esempio? Come nell'esempio di bash in una risposta sopra? Quindi è chiaro dalla sola risposta come usare? – hakre

Problemi correlati