2010-03-29 15 views
8

Me gustaría verificar el código comprometido en mi repositorio remoto de git con PHP CodeSniffer y rechazarlo si hay algún código de problemas. ¿Alguien tiene un ejemplo de cómo usarlo en el repositorio remoto de git o tal vez un ejemplo de cómo usarlo con un gancho de pre-recepción? Gracias.Git pre-receive hook para iniciar PHP CodeSniffer

Respuesta

3

Tal vez esto le apuntan en la dirección correcta: (Orginal de: http://www.squatlabs.de/versionierung/arbeiten-git-hooks en alemán)

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

Tendrá que editar el ejecutivo de línea exec ('php -l ... para indicar una CodeSniffer . instalación

+0

por desgracia no funciona con pre-recibir gancho :( – Ralphz

+0

Nop, tendrá que crear una pre-commit en el lado del cliente, pero se puede realizar el seguimiento del gancho para que cada desarrollador tenga que tirar de los ganchos. AFAIK, usted el servidor no puede probar el contenido al presionar ... :( – FMaz008

3

Ok he encontrado la solución :)

Esta es una prueba de concepto para la pre-:) recibir gancho:

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

Este código de ejemplo solo imprimirá los blobs recibidos por el repositorio remoto, pero es suficiente para que alguien necesite algo así (espero).

Puede poner cada burbuja en algunos corren archivo temporal lo que necesita en este archivo borrar el archivo y así sucesivamente ...

+0

gracias, eso ayudó mucho –

2

he desarrollado un gancho git antes de recibir basado en PHPCodeSniffer para verificar el estilo del código de los archivos PHP, JavaScript y CSS.

Mi script está disponible en Github: https://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook

+0

¿Puede ampliar su respuesta con un ejemplo? ¿Le gusta el ejemplo bash en una respuesta anterior? Por lo tanto, está claro solo por la respuesta de cómo usarlo? – hakre