Search code examples
phpgitphpcodesniffer

Git pre-receive hook to launch PHP CodeSniffer


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.


Solution

  • 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.