@@ -0,0 +1,93 @@
#! /bin/bash
# Coding Standards fixer from http://cs.sensiolabs.org/ pre-commit hook for git
#
# Based on https://github.com/s0enke/git-hooks
#
# @author Soenke Ruempler <[email protected] >
# @author Sebastian Kaspari <[email protected] >
#
# see the README
FILE_PATTERN=" \.(php|phtml)$"
TMP_STAGING=" .tmp_staging"
# stolen from template file
if git rev-parse --verify HEAD
then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# this is the magic:
# retrieve all files in staging area that are added, modified or renamed
# but no deletions etc
FILES=$( git diff-index --name-only --cached --diff-filter=ACMR $against -- )
if [ " $FILES " == " " ]; then
exit 0
fi
# match files against whitelist
FILES_TO_CHECK=" "
for FILE in $FILES
do
echo " $FILE " | egrep -q " $FILE_PATTERN "
RETVAL=$?
if [ " $RETVAL " -eq " 0" ]
then
FILES_TO_CHECK=" $FILES_TO_CHECK $FILE "
fi
done
if [ " $FILES_TO_CHECK " == " " ]; then
exit 0
fi
# create temporary copy of staging area
if [ -e $TMP_STAGING ]; then
rm -rf $TMP_STAGING
fi
mkdir $TMP_STAGING
# Copy contents of staged version of files to temporary staging area
# because we only want the staged version that will be commited and not
# the version in the working directory
STAGED_FILES=" "
for FILE in $FILES_TO_CHECK
do
ID=$( git diff-index --cached $against $FILE | cut -d " " -f4)
# create staged version of file in temporary staging area with the same
# path as the original file so that the phpcs ignore filters can be applied
mkdir -p " $TMP_STAGING /$( dirname $FILE ) "
git cat-file blob $ID > " $TMP_STAGING /$FILE "
STAGED_FILES=" $STAGED_FILES $TMP_STAGING /$FILE "
done
# ### Run the checks ####
RETVAL=0
# ######### PHP CS Fixer ##########
FIXDATA=` php php-cs-fixer.phar fix $TMP_STAGING --dry-run`
if [ " $FIXDATA " != " " ]
then
echo " One or more files do not conform to coding standards."
echo " You can fix them by running the following commands:"
echo
echo cd ` pwd`
echo $FIXDATA | sed -r ' s/ ?[0-9]+\) /\nphp php-cs-fixer.phar fix /g'
echo
RETVAL=1
fi
# delete temporary copy of staging area
rm -rf $TMP_STAGING
exit $RETVAL