diff --git a/bin/pre-commit b/bin/pre-commit new file mode 100755 index 00000000..8d93f8ab --- /dev/null +++ b/bin/pre-commit @@ -0,0 +1,33 @@ +#!/bin/bash + +pass=true + +files=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '\.(php|phtml)$') +if [ "$files" != "" ]; then + + # Run php syntax check before commit + while read -r file; do + php -l "$file" + if [ $? -ne 0 ]; then + pass=false + fi + done <<< "$files" + + # Run php-cs-fixer validation before commit + echo "$files" | xargs ./vendor/bin/php-cs-fixer fix --diff --config .php_cs.dist + if [ $? -ne 0 ]; then + pass=false + fi + + # Automatically add files that may have been fixed by php-cs-fixer + echo "$files" | xargs git add +fi + +if $pass; then + exit 0 +else + echo "" + echo "PRE-COMMIT HOOK FAILED:" + echo "Code style validation failed. Please fix errors and try committing again." + exit 1 +fi