如何在 Git 上获取 Python 退出代码 Windows 与 git 挂钩 Windows
How to get Python Exit code in a Git Hook on Windows with git for Windows
我在我的预推送 git 挂钩中添加了一个 Python 脚本调用,它执行我的单元测试。
如果我不使用 Git LFS,这很好用。但是,如果我使用 Git LFS,这将不起作用,因为我必须区分我的测试是否失败。如果它们失败了,我不想推送实际代码,否则我会使用 Git LFS 命令推送它们。
下面的钩子是我的起点。从这一点开始,我想使用 IF 语句来决定是否执行 Git LFS 命令。
#!/bin/sh
python .git/hooks/pre-push.py
command -v git-lfs >/dev/null 2>&1 || { echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/pre-push.\n"; exit 2; }
git lfs pre-push "$@"
以下代码片段显示了我如何在测试失败时退出 Python。
errno = pytest.main(["-v", "-m", "not device_test"])
if(errno == ExitCode.TESTS_FAILED):
print("Pytests failed!")
sys.exit(1)
问题是我无法使用 $? (就像在几个地方建议的那样)。
知道如何获取退出代码吗?
当然,解决方法是使用 git 挂钩,Git LFS 不使用该挂钩,例如预提交。但是,我想在推送之前执行单元测试。
在您的脚本顶部添加一行,紧跟在 shebang (#!
) 之后:
set -e
这使得 shell 检查每个命令的退出状态,如果非零则退出。因此,如果您的测试失败,则不会执行其余命令,也不会推送您的数据。
我在我的预推送 git 挂钩中添加了一个 Python 脚本调用,它执行我的单元测试。
如果我不使用 Git LFS,这很好用。但是,如果我使用 Git LFS,这将不起作用,因为我必须区分我的测试是否失败。如果它们失败了,我不想推送实际代码,否则我会使用 Git LFS 命令推送它们。
下面的钩子是我的起点。从这一点开始,我想使用 IF 语句来决定是否执行 Git LFS 命令。
#!/bin/sh
python .git/hooks/pre-push.py
command -v git-lfs >/dev/null 2>&1 || { echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/pre-push.\n"; exit 2; }
git lfs pre-push "$@"
以下代码片段显示了我如何在测试失败时退出 Python。
errno = pytest.main(["-v", "-m", "not device_test"])
if(errno == ExitCode.TESTS_FAILED):
print("Pytests failed!")
sys.exit(1)
问题是我无法使用 $? (就像在几个地方建议的那样)。
知道如何获取退出代码吗?
当然,解决方法是使用 git 挂钩,Git LFS 不使用该挂钩,例如预提交。但是,我想在推送之前执行单元测试。
在您的脚本顶部添加一行,紧跟在 shebang (#!
) 之后:
set -e
这使得 shell 检查每个命令的退出状态,如果非零则退出。因此,如果您的测试失败,则不会执行其余命令,也不会推送您的数据。