8

PHP CodeSnifferを使用してリモートgitリポジトリにコミットされたコードを確認し、コード標準に問題がある場合は拒否したいと思います。誰かがgitリモートリポジトリでそれを使用する方法の例、または多分pre-receiveフックでそれを使用する方法の例を持っていますか?ありがとう。

4

4 に答える 4

3

わかりました私は解決策を見つけました:)

これは概念コードの証明です:) pre-receive フック:

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

このサンプル コードは、リモート リポジトリが受信した BLOB のみを出力しますが、そのようなものを必要としている人を動かすには十分です (期待しています)。

すべてのブロブを一時ファイルに入れ、このファイルで必要なものを実行し、ファイルを削除するなど...

于 2010-03-29T20:00:06.757 に答える
3

たぶん、これはあなたを正しい方向に向けています:

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

コードスニッファーのインストールを指すように、実行行 exec('php -l... を編集する必要があります。

于 2010-03-29T16:22:34.680 に答える
2

PHP、JavaScript、および CSS ファイルのコード スタイルをチェックするために、PHPCodeSniffer に基づいて pre-receive git フックを開発しました。

私のスクリプトは Github から入手できます: https://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook

于 2012-06-10T14:19:53.513 に答える
2

これが役立つかもしれません: http://github.com/s0enke/git-hooks/tree/master/phpcs-pre-commit/

于 2010-06-20T22:08:58.433 に答える