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
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
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 ...
cảm ơn, điều đó đã giúp rất nhiều –
này có thể giúp: http://github.com/s0enke/git-hooks/tree/master/phpcs-pre-commit/
Đây là một móc trước khi cam kết, rất khác nhau. –
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
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
tiếc là nó không làm việc với tiền nhận móc :( – Ralphz
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