Git pre-receive hook para lanzar PHP CodeSniffer

Me gustaría verificar el código comprometido con mi repository 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 repository remoto de git o tal vez un ejemplo de cómo usarlo con un gancho de pre-recepción? Gracias.

Tal vez esto te indique 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); 

Deberá editar el ejecutor de línea ejecutable ('php -l … para apuntar a la installation del encryptionr de códigos.

Ok, encontré la solución 🙂

Este es el código de testing de concepto 🙂 para el gancho pre-recepción:

 #!/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 repository remoto, pero es suficiente para que alguien necesite algo así (espero).

Puede poner cada blob en algún file temporal ejecute lo que necesite en este file, elimine el file y así sucesivamente …

Desarrollé un git hook previo a la recepción basado en PHPCodeSniffer para verificar el estilo del código de los files PHP, JavaScript y CSS.

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