PHP开发质量控制之:git 本地钩子 pre-commit

使用 phpcs,phpcbf,php-cs-fixer 工具进行 php 规范自动检查修正。

长期使用下团队代码规范一致,贵在坚持。

使用前需要安装 phpcs,php-cs-fixer,phpcbf 工具。

#!/bin/sh
PHPCS_BIN=phpcs
PHPCBF_BIN=phpcbf
PHPCSFIXER_BIN=php-cs-fixer
PHPCS_CODING_STANDARD=PSR2
PHPCS_IGNORE="database/*,*.blade.php"
PHPCS_FILE_PATTERN="\.(php)$"
 
FILES=$(git diff --cached --name-only)
 
BRANCH=$(git branch -vv | awk '$1=="*" {print $4}')
echo "提交到 $BRANCH 分支"
if [[ "$BRANCH" == "[origin/develop]" || "$BRANCH" == "[origin/master]"  ]]; then
    echo "请不要向 $BRANCH 分支提交代码!"
    exit 1
fi
 
if [ "$FILES" == "" ]; then
    exit 0
fi
 
for FILE in $FILES
do
 echo "$FILE" | egrep -q "$PHPCS_FILE_PATTERN"
 RETVAL=$?
 if [ "$RETVAL" -eq "0" ]
 then
     echo "$FILE";
     if [ ! -f "$FILE" ];then
         echo "$FILE 不存在"
         continue
     fi
     PHPCS_OUTPUT=$($PHPCS_BIN $FILE --standard=$PHPCS_CODING_STANDARD --ignore=$PHPCS_IGNORE)
     PHPCS_RETVAL=$?
     if [ $PHPCS_RETVAL -ne 0 ];
     then
         $($PHPCBF_BIN $FILE)
         $($PHPCSFIXER_BIN fix $FILE --rules=@$PHPCS_CODING_STANDARD)
         PHPCS_OUTPUT=$($PHPCS_BIN $FILE --standard=$PHPCS_CODING_STANDARD --ignore=$PHPCS_IGNORE)
         PHPCS_RETVAL=$?
         if [ $PHPCS_RETVAL -ne 0 ];
         then
             echo $PHPCS_OUTPUT
             exit 1
         fi
     fi
 fi
done
exit 0

 

posted @ 2019-06-18 10:40  不骑乌骓  阅读(210)  评论(0编辑  收藏  举报