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.

  • PHPStorm 8 version control (git) scope to ignore files in PHP_CodeSniffer
  • Using Jenkins and Php Code Sniffer
  • git pre-commit hook bypass email
  • Git: pre-receive hook with PHP_CodeSniffer
  • How to Ignore Line Length PHP_CodeSniffer
  • How to rebase (squeeze) last commits to master and change commit message
  • TortoiseGit context options missing for files
  • Git hook to prevent creating new branches from specific branches
  • How to revert uncommitted changes including files and folders?
  • What's a good strategy for storing database snapshots in git?
  • MPEG-DASH playback on VLC
  • 4 Solutions collect form web for “Git pre-receive hook to launch PHP CodeSniffer”

    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.

    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…

    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

    Git Baby is a git and github fan, let's start git clone.