2010-03-29 6 views
8

Tôi muốn kiểm tra mã đã cam kết với kho lưu trữ git từ xa của mình bằng PHP CodeSniffer và từ chối nó nếu có bất kỳ vấn đề nào về tiêu chuẩn mã. Có ai có một ví dụ làm thế nào để sử dụng nó trên kho git từ xa hoặc có thể ví dụ làm thế nào để sử dụng nó với móc nhận trước? Cảm ơn.Git pre-receive hook để khởi chạy PHP CodeSniffer

Trả lời

3

Có lẽ thời điểm này bạn đi đúng hướng: (gốc từ: http://www.squatlabs.de/versionierung/arbeiten-git-hooks bằng tiếng Đức)

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

Bạn sẽ phải sửa dòng exec exec ('php -l ... để trỏ đến codesniffer của bạn . cài đặt

+0

tiếc là nó không làm việc với tiền nhận móc :( – Ralphz

+0

Nop, bạn sẽ phải tạo một pre-cam kết về phía khách hàng, nhưng bạn có thể theo dõi Vì vậy, mỗi người phát triển sẽ phải kéo các móc. AFAIK, bạn máy chủ không thể kiểm tra nội dung khi đẩy ... :( – FMaz008

3

Ok tôi tìm thấy giải pháp :)

Đây là bằng chứng của mã khái niệm :) cho trước nhận móc:

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

Mã ví dụ này sẽ chỉ in các đốm màu nhận được từ kho lưu trữ từ xa nhưng nó đủ để có được một ai đó cần một cái gì đó như thế đi (tôi hy vọng).

Bạn có thể đặt mỗi blob trong một số chạy tập tin tạm thời bất cứ điều gì bạn cần trong hồ sơ này xóa các tập tin và vân vân ...

+0

cảm ơn, điều đó đã giúp rất nhiều –

2

tôi đã phát triển một-nhận trước móc git dựa trên PHPCodeSniffer để kiểm tra kiểu mã của các tệp PHP, JavaScript và CSS.

kịch bản của tôi là có sẵn từ Github: https://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook

+0

Bạn có thể mở rộng câu trả lời của mình bằng ví dụ không? Ví dụ như ví dụ bash trong câu trả lời ở trên? Vì vậy, nó rõ ràng từ câu trả lời một mình cách sử dụng? – hakre