Git pre-receive hook to launch PHP CodeSniffer [closed]

孤者浪人 提交于 2019-12-18 15:53:52

问题


I'd like to check code committed to my remote git repository with PHP CodeSniffer and reject it if there are any problems code standards. Does anyone have an example how to use it on git remote repository or maybe example how to use it with pre-receive hook? Thanks.


回答1:


Maybe this point you in the right direction: (Orginal from: http://www.squatlabs.de/versionierung/arbeiten-git-hooks in German)

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

You will have to edit the exec line exec('php -l... to point to your codesniffer installation.




回答2:


Ok I found the solution :)

This is proof of concept code :) for pre-receive hook:

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

This example code will only print blobs received by remote repository but it's enough to get someone needing something like that going (I hope).

You can put every blob in some temporary file run whatever you need on this file delete the file and so on...




回答3:


This might help: http://github.com/s0enke/git-hooks/tree/master/phpcs-pre-commit/




回答4:


I developed a pre-receive git hook based on PHPCodeSniffer to check the code styling of PHP, JavaScript and CSS files.

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



来源:https://stackoverflow.com/questions/2539404/git-pre-receive-hook-to-launch-php-codesniffer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!