2010-03-29 7 views
8

Ich möchte Code, der an mein Remote-Git-Repository übergeben wurde, mit PHP CodeSniffer überprüfen und ihn ablehnen, wenn es irgendwelche Code-Standards gibt. Hat jemand ein Beispiel, wie man es auf dem Remote-Repository von git verwendet oder vielleicht ein Beispiel, wie man es mit einem Pre-Receive-Hook benutzt? Vielen Dank.Git pre-receive Hook zum Starten von PHP CodeSniffer

Antwort

3

Vielleicht haben Sie diesen Punkt in die richtige Richtung: (Orginal von: http://www.squatlabs.de/versionierung/arbeiten-git-hooks in Deutsch)

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

Sie haben die exec Zeile exec ('php -l bearbeiten ... auf Ihre codesniffer-zu-Punkt . Installation

+0

leider ist es nicht mit vorge erhalten arbeiten Haken :( – Ralphz

+0

Nop, werden Sie ein pre-commit auf Client-Seite erstellen müssen, aber Sie können die Spur hook, so dass jeder Entwickler die Haken ziehen muss AFAIK, du der Server kann den Inhalt beim Drücken nicht testen ... :( – FMaz008

3

Ok ich die Lösung gefunden :)

Dies ist proof of concept code :) für vorge erhalten Haken:

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

Dieser Beispielcode druckt nur Blobs, die vom Remote-Repository empfangen werden, aber es ist genug, um jemanden zu bekommen, der so etwas benötigt (hoffentlich).

Sie jeden Klecks in einer temporären Datei ausgeführt setzen kann, was Sie zu dieser Datei benötigen Sie die Datei löschen und so weiter ...

+0

danke, das hat mir sehr geholfen –

2

ich einen Pre-erhalten git entwickelt Haken basierend auf PHPCodeSniffer zur Überprüfung des Code-Stylings von PHP-, JavaScript- und CSS-Dateien.

Mein Skript ist von Github verfügbar: https://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook

+0

Können Sie Ihre Antwort mit einem Beispiel erweitern? Wie das bash Beispiel in einer Antwort oben? So ist es aus der Antwort allein klar, wie zu verwenden? – hakre

Verwandte Themen