#!/usr/bin/php /dev/null", $diff, $return); if ($return > 0) { echo "Could not run git diff\n\n"; exit(1); } $filename_pattern = '/\.php$/'; foreach ($diff as $file) { if (!preg_match($filename_pattern, $file)) { continue; } $tree = array(); $return = 0; exec("git ls-tree $ref $file 2> /dev/null", $tree, $return); if ($return > 0 || empty($tree)) { echo "Deleted file '$file'! skipping test...\n\n"; continue; } echo "\nRunning php linter on '$file'...\n"; $tree = preg_split('/\s/', $tree[0]); $fileContents = array(); exec("git cat-file $tree[1] $tree[2] 2> /dev/null", $fileContents, $return); if ($return > 0) { echo "Could not run git cat-file\n\n"; exit(1); } $fileContents = implode("\n", $fileContents); $pipes = array(); $proc = proc_open('php -l', array(0 => array('pipe', 'r'), 1 => array('pipe', 'w')), $pipes); if (!is_resource($proc)) { echo "Could not creater php linter process\n\n"; exit(1); } fwrite($pipes[0], $fileContents); fclose($pipes[0]); fclose($pipes[1]); $resultCode = proc_close($proc); if ($resultCode != 0) { echo "Error parsing file '$file'\n\n"; exit($resultCode); } print "'$file' PASSED linter test..\n\n"; print "Running code standard test on '$file'...\n\n"; // also check coding standard $pipes = array(); $proc = proc_open('phpcs --standard=drupalcs', array(0 => array('pipe', 'r'), 1 => array('pipe', 'w')), $pipes); if (!is_resource($proc)) { echo "Could not creater phpcs process\n\n"; exit(1); } fwrite($pipes[0], $fileContents); fclose($pipes[0]); echo stream_get_contents($pipes[1]); fclose($pipes[1]); $resultCode = proc_close($proc); if ($resultCode != 0) { echo "File '$file' does not follow drupal code standard\n\n"; exit($resultCode); } print "'$file' PASSED code standard test...\n\n"; } echo "No errors detected\n\n"; exit(0);