mirror of
https://github.com/phpbb/phpbb.git
synced 2025-05-06 07:35:29 +02:00
One major issue with the pre-hook so far was partially staged files, because it used filenames for php lint. These changes will make the hook read the file contents from the index instead. Great thanks to David Soria Parra.
67 lines
1.2 KiB
Bash
Executable File
67 lines
1.2 KiB
Bash
Executable File
#!/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
|