2010-03-29 12 views
8

Chciałbym sprawdzić kod przypisany do mojego zdalnego repozytorium git za pomocą PHP CodeSniffer i odrzucić go, jeśli są jakieś problemy standardów kodowych. Czy ktoś ma przykład jak go używać na zdalnym repozytorium git lub może np. Jak go używać z hakiem pre-receive? Dzięki.Git pre-receive hook do uruchomienia PHP CodeSniffer

Odpowiedz

3

Może ten punkt w dobrym kierunku: (Orginal from: http://www.squatlabs.de/versionierung/arbeiten-git-hooks w języku niemieckim)

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

Będziesz musiał zmodyfikować linię exec exec ('php -l ... punkt do codesniffer . instalacja

+0

niestety nie działa z wcześniej otrzymać hak :( – Ralphz

+0

NOP, musisz utworzyć pre-commit po stronie klienta, ale można śledzić hak, więc każdy program wywołujący będzie musiał pociągnąć za haki. AFAIK, ty serwer nie może przetestować zawartości podczas przesuwania ... :( – FMaz008

3

Ok znalazłem rozwiązanie :)

jest to dowód kodu koncepcyjnego :) dla wstępnego otrzymać haczyk:

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

Ten przykładowy kod wyświetli tylko obiekty typu blob odebrane przez zdalne repozytorium, ale wystarczy, aby ktoś potrzebował czegoś podobnego (mam nadzieję).

można umieścić każdą plamę w jakiejś perspektywie czasowej plików cokolwiek trzeba ten plik usunąć plik i tak dalej ...

+0

dziękuję, to bardzo pomogło –

2

opracowałem wcześniej otrzymane hak git na podstawie PHPCodeSniffer, aby sprawdzić styl kodowania plików PHP, JavaScript i CSS.

Mój skrypt jest dostępny od Github: https://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook

+0

Czy możesz przedłużyć swoją odpowiedź na przykładzie? Jak w przykładzie bash w powyższej odpowiedzi? Czy z samej odpowiedzi jest jasne, jak używać? – hakre