问题:我正在尝试创建一个hg预提交挂钩。即使钩子调用的bash脚本中的唯一内容是“exit 1”,提交也会成功。
我尝试过的事情:
- 写了一个只有“退出1”的bash脚本。 (这仍然让提交继续。我希望提交被中止。)
- 在bash脚本中暂停以验证它是否正在执行。 (它正在执行)
-set precommit直接等于hgrc文件中的“exit 1”。这成功中止了提交,所以我知道钩子正在工作。
- 写了一个返回非零的python脚本,并停止了提交的发生。这验证了钩子正在使用python脚本。
从我的python脚本中调用了我的bash脚本,并在python中打印出bash脚本的返回值。这总是打印零,告诉我我的bash脚本无法正常工作。
Bash示例: hgrc文件:
[hooks]
precommit = pre-commit.sh
pre-commit.sh
#!/bin/sh
exit 1
Python示例: hgrc文件:
[hooks]
precommit = pre_commit.py
pre_commit.py:
#!/usr/bin/env python
import sys
import os
# I would expect this to print 1 since pre-commit.sh explicitly exits 1
# However this always prints 0
print os.system("pre-commit.sh")
# This is working fine. It succesfully aborts the commit
sys.exit(1)
我只想重申,这与python无关。我只使用python来检查我的bash脚本的值。问题是我的bash脚本总是返回0并且我需要它返回非零以便中止提交。 我有一种感觉,这是由于我运行窗户。我有git hooks工作,但我相信这是因为git bash解释了脚本。有什么建议?提前致谢。
答案 0 :(得分:0)
你不能在Windows上使用“precommit.sh”,并希望它能在不告诉Windows如何使用它的情况下工作。
您可以使用这样的bat文件(因为操作系统知道如何处理它!):
int whatIsThis(const int b[], size_t n) {
if (n == 0) {
return 0;
} else {
return b[0] + whatIsThis(b + 1, n - 1);
}
}