PHP CodeSniffer başlatmak için ön almak kanca kalk [kapalı]

4 Cevap php

Ben PHP CodeSniffer ile benim uzak git depo taahhüt kodunu kontrol edin ve herhangi bir sorun kod standartları varsa onu reddetmek istiyorum. Herkes nasıl ön almak kanca ile nasıl kullanılacağını git uzak bir depo ya da belki örnek üzerinde kullanmak için bir örnek var mı? Teşekkürler.

4 Cevap

Doğru yönde belki bu nokta: (Orjinal itibaren: http://www.squatlabs.de/versionierung/arbeiten-git-hooks Almanca)

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

Sen exec çizgi exec ('php-l ... senin codesniffer yüklemesi için düzenlemek zorunda kalacak.

PHP, JavaScript ve CSS dosyaları kod stil kontrol etmek için PHPCodeSniffer dayalı bir ön alma git kanca geliştirdi.

My script is available from Github : https://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook

Tamam ben bir çözüm buldum :)

Bu ön-alma kanca için kavram kodu :) kanıtıdır:

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

Bu örnek kod, yalnızca uzak depodaki tarafından alınan lekeler basacaktır ama birisi bu (umarım) gidiyor gibi bir şey gerek almak için yeterli.

Eğer böylece dosyayı silin bu dosya üzerinde gerek ve ne olursa olsun bazı geçici dosya vadede her damla koyabilirsiniz ...