gpt4 book ai didi

php - PHPCS 的 Git Pre-Commit 钩子(Hook)在 Laravel 的 Windows 中给了我错误

转载 作者:行者123 更新时间:2023-12-04 07:19:54 26 4
gpt4 key购买 nike

我已经从 composer.json 安装了 PHPCS

"require-dev": {
"phpstan/phpstan": "^0.12.93",
"squizlabs/php_codesniffer": "^3.6"
},
我正在使用 laravel 8,所以我在 .git/hooks/pre-commit 中为预提交文件添加了以下代码文件:
#!/bin/sh

# get bash colors and styles here:
# http://misc.flogisoft.com/bash/tip_colors_and_formatting
C_RESET='\e[0m'
C_RED='\e[31m'
C_GREEN='\e[32m'
C_YELLOW='\e[33m'

function __run() #(step, name, cmd)
{
local color output exitcode

printf "${C_YELLOW}[%s]${C_RESET} %-20s" "$1" "$2"
output=$(eval "$3" 2>&1)
exitcode=$?

if [[ 0 == $exitcode || 130 == $exitcode ]]; then
echo -e "${C_GREEN}OK!${C_RESET}"
else
echo -e "${C_RED}NOK!${C_RESET}\n\n$output"
exit 1
fi
}

modified="git diff --diff-filter=M --name-only --cached | grep \".php$\""
ignore="resources/lang,resources/views,bootstrap/helpers,database/migrations,bin"
phpcs="./vendor/bin/phpcs ./app --report=code --colors --report-width=80 --standard=PSR2 --ignore=${ignore}"

__run "1/3" "php lint" "${modified} | xargs -r php -l"
__run "2/3" "code sniffer" "${modified} | xargs -r ${phpcs}"
__run "3/3" "phpstan" "${modified} | xargs -r vendor/bin/phpstan analyse"
但这给了我以下错误:
[2/3] code sniffer        NOK!

xargs: ./vendor/bin/phpcs: No such file or directory
编辑:
需要添加以下代码

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..."
echo $FILES;exit 1;
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

最佳答案

工作代码,以便对其他人有用:

#!C:/Program\ Files/Git/usr/bin/sh.exe

PROJECT=`php -r "echo dirname(dirname(realpath('$0')));"`

STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".php\{0,1\}$")

if [[ "$STAGED_FILES" = "" ]]; then
exit 0
fi

PASS=true

echo " Validating PHPCS:"

#doesnt matter where git was ran...just get absolute path to the .git folder
gitBase=`git rev-parse --absolute-git-dir`


# Check for phpcs
which ${gitBase}/../<path>/vendor/bin/phpcs &> /dev/null
if [[ "$?" == 1 ]]; then
echo " Please install PHPCS "
exit 1
fi

RULESET="$PROJECT/.githooks/ruleset.xml"

for FILE in $STAGED_FILES
do
${gitBase}/../<path>/vendor/bin/phpcs --colors --standard="$RULESET" -n -p "$FILE"

if [[ "$?" == 0 ]]; then
echo "PHPCS Passed: $FILE "
else
echo "PHPCS Failed: $FILE "
PASS=false
fi
done

echo " PHPCS validation completed! "

if ! $PASS; then
echo " COMMIT FAILED: Your commit contains files that should pass PHPCS but do not. Please fix the PHPCS errors and try again. "
exit 1
else
echo " COMMIT SUCCEEDED "
fi

exit $?
和 ruleset.xml 是
<?xml version="1.0"?>
<ruleset name="PHP_CodeSniffer">
<description>The coding standard for our project.</description>
<rule ref="PSR2" />

<file>app</file>
<file>bootstrap</file>
<file>config</file>
<file>database</file>
<file>resources</file>
<file>routes</file>
<file>tests</file>

<exclude-pattern>bootstrap/cache/*</exclude-pattern>
<exclude-pattern>bootstrap/autoload.php</exclude-pattern>
<exclude-pattern>*/migrations/*</exclude-pattern>
<exclude-pattern>*/seeds/*</exclude-pattern>
<exclude-pattern>*.blade.php</exclude-pattern>
<exclude-pattern>*.js</exclude-pattern>
<exclude-pattern>tests/*</exclude-pattern>
<!-- Show progression -->
<arg value="p"/>
</ruleset>

关于php - PHPCS 的 Git Pre-Commit 钩子(Hook)在 Laravel 的 Windows 中给了我错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68570839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com