From db8c557e4c6fee0a66c78863d4082dc17ff22d57 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Wed, 10 Mar 2010 20:07:10 +0100 Subject: [git-tools] pre-commit hook for syntax checking This pre-commit hook utilises PHP's command-line -l (lint) option, which checks for syntax errors. In case of an error the commit is rejected and the error displayed. Testing is welcome. --- git-tools/hooks/pre-commit | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 git-tools/hooks/pre-commit (limited to 'git-tools') diff --git a/git-tools/hooks/pre-commit b/git-tools/hooks/pre-commit new file mode 100755 index 0000000000..4a070d130c --- /dev/null +++ b/git-tools/hooks/pre-commit @@ -0,0 +1,44 @@ +#!/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 + +# 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 + +# get a list of staged .php files, omitting file removals +IFS=" " +for file in $(git diff --cached --name-status $against | grep -v -E '^D' | cut -f2 | grep -E '\.php$') +do + # store lint result in a temp file + tempfile="/tmp/$(basename $0).$$.tmp" + if ! php -l "$file" >/dev/null 2>"$tempfile" + then + error=1 + cat "$tempfile" + fi + rm -f "$tempfile" +done +unset IFS + +if [ $error -eq 1 ] +then + exit 1 +fi -- cgit v1.2.1