Skip to content

Instantly share code, notes, and snippets.

@fdemiramon
Created May 12, 2015 19:13
Show Gist options
  • Star 35 You must be signed in to star a gist
  • Fork 12 You must be signed in to fork a gist
  • Save fdemiramon/0423b4308218d417fbf3 to your computer and use it in GitHub Desktop.
Save fdemiramon/0423b4308218d417fbf3 to your computer and use it in GitHub Desktop.
Pre-commit hook for git with phpcs and phpcbf (auto-correct obvious violations)
#!/bin/sh
PROJECT=`php -r "echo dirname(dirname(dirname(realpath('$0'))));"`
STAGED_FILES_CMD=`git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\\\.php`
# Determine if a file list is passed
if [ "$#" -eq 1 ]
then
oIFS=$IFS
IFS='
'
SFILES="$1"
IFS=$oIFS
fi
SFILES=${SFILES:-$STAGED_FILES_CMD}
echo "Checking PHP Lint..."
for FILE in $SFILES
do
php -l -d display_errors=0 $PROJECT/$FILE
if [ $? != 0 ]
then
echo "Fix the error before commit."
exit 1
fi
FILES="$FILES $PROJECT/$FILE"
done
if [ "$FILES" != "" ]
then
echo "Running Code Sniffer..."
./bin/phpcs --standard=PSR2 --encoding=utf-8 -n -p $FILES
if [ $? != 0 ]
then
echo "Coding standards errors have been detected. Running phpcbf..."
./bin/phpcbf --standard=PSR2 --encoding=utf-8 -n -p $FILES
git add $FILES
echo "Running Code Sniffer again..."
./bin/phpcs --standard=PSR2 --encoding=utf-8 -n -p $FILES
if [ $? != 0 ]
then
echo "Errors found not fixable automatically"
exit 1
fi
fi
fi
exit $?
@AnnaDamm
Copy link

then leave it out :-)
I would always do a phpcs after phpcbf, because you might only want to have an error code thrown when not all files could be fixed automatically and no error code when it was automatically fixed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment