diff options
Diffstat (limited to 'git-tools/hooks/pre-commit')
-rwxr-xr-x | git-tools/hooks/pre-commit | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit new file mode 100755 index 0000000000..1c67a0f3e3 --- /dev/null +++ b/git-tools/hooks/pre-commit @@ -0,0 +1,66 @@ +#!/bin/sh +# +# A hook to disallow php syntax errors to be committed +# by running php -l (lint) on them. It requires php-cli +# to be installed. +# +# This is a pre-commit hook. +# +# To install this you can either copy or symlink it to +# $GIT_DIR/hooks, example: +# +# ln -s ../../git-tools/hooks/pre-commit \\ +# .git/hooks/pre-commit + +PHP_BIN=php + +# necessary check for initial commit +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +error=0 + +IFS=$'\n' +# get a list of staged files +for line in $(git diff-index --cached --full-index $against) +do + # split needed values + sha=$(echo $line | cut -d' ' -f4) + temp=$(echo $line | cut -d' ' -f5) + status=$(echo $temp | cut -d' ' -f1) + filename=$(echo $temp | cut -d' ' -f2) + + # file extension + ext=$(echo $filename | sed 's/^.*\.//') + + # only check files with php extension + if [ $ext != "php" ] + then + continue + fi + + # do not check deleted files + if [ $status = "D" ] + then + continue + fi + + # check the staged file content for syntax errors + # using php -l (lint) + git cat-file -p $sha | $PHP_BIN -l >/dev/null + if [ $? -ne 0 ] + then + error=1 + fi +done +unset IFS + +if [ $error -eq 1 ] +then + exit 1 +fi |