Mercurial pre commit hook

时间:2010-11-12 07:12:17

标签: mercurial

如何设置预提交挂钩,将在已提交的文件中搜索字符串,如果找到则停止提交?

3 个答案:

答案 0 :(得分:21)

Chapter 10the mercurial book完全涵盖了这一点:

$ cat .hg/hgrc
[hooks]
pretxncommit.whitespace = hg export tip | (! egrep -q '^\+.*[ \t]$')
$ echo 'a ' > a
$ hg commit -A -m 'test with trailing whitespace'
adding a
transaction abort!
rollback completed
abort: pretxncommit.whitespace hook exited with status 1
$ echo 'a' > a
$ hg commit -A -m 'drop trailing whitespace and try again'
  

在这个例子中,我们介绍一个简单的   pretxncommit挂钩检查   尾随空格。这个钩子是   简而言之,但不是很有帮助。它退出了   如果更改添加,则显示错误状态   带有任意尾随空格的行   文件,但不打印任何   可能有助于我们的信息   识别违规文件或行。   它也有不好的属性   注意未经修改的线条;   只有引入新尾随的行   空白会造成问题。

只需将正则表达式从'^\+.*[ \t]$'更改为您要查找的任何字符串。

答案 1 :(得分:5)

Ry4an的答案几乎是正确的:) 但你需要用“hg diff”替换“hg export tip” tip是最后提交的变更集,但对本地未经修改的变更感兴趣 - 所以diff是你需要的。 为了我的需要,我将以下内容添加到我的hgrc

precommit.removeDebug = hg diff -S | grep -v '^-' | (! egrep '(var_dump)|(exit)|(print_r)')
-S包括subrepos(maye不需要,可能仍然有bug) grep -v'^ - '从diff中删除指示已删除行的行。 我删除了-q所以我至少知道要删除什么,但不幸的是这个方法无法打印出文件和出现的亚麻(因为它是管道)。也许有人有更好的方法去做。

答案 2 :(得分:5)

BTW,在Windows上你可以使用

[hooks]
pretxncommit.nocommit = hg export tip | findstr NOCOMMIT && EXIT /B 1 || EXIT /B 0

如果您的源包含字符串“NOCOMMIT”

,则此挂钩将失败