我目前正在使用 Git 的pre-push
钩子来运行 PHP CS Fixer,但我正在寻找一种更不那么笨重的方法。我不知道如何传递 GNU Make 命令的脚本退出代码并传递给 Git 挂钩脚本。
文件设置
pre-push
:
#!/bin/bash
output=$(make run-cs-fixer)
exitCode="${output##*$'\n'}" # Gets last line printed from cs-fixer.sh
# Use exitCode to continue or halt push
# Exit code from cs-fixer.sh cannot be obtained here. Make seems to produce its own exit code.
Makefile
:
run-cs-fixer:
@-cd docker-compose exec -T workspace bash ./cs-fixer.sh
# echo $? gives me the exit code from cs-fixer.sh, but it's not available outside of this area, even if exited with it.
cs-fixer.sh
:
#!/bin/bash
./vendor/bin/php-cs-fixer fix...
exitCode=$?
echo $exitCode # This is the exit code I need
因此,它会:git push...
> pre-push
> Makefile
>cs-fixer
生成需要在pre-push
.
如您所见,我从 手动打印退出代码,以便在使用cs-fixer.sh
捕获该脚本的整个输出时可以提取它。我只是不知道如何自然地传递现有代码。pre-push
output=$(make run-cs-fixer)
似乎 Make 启动了一个新的 shell 来运行它的命令,所以这似乎是问题之一,但无法开始.ONESHELL
工作。我能够确认我可以使用 Make 命令指令(如下run-cs-fixer:
)回显所需的退出代码,但在pre-push
.