我在本地mercurial存储库中有一些pretxncommit挂钩,这些挂钩用于检查提交消息是否包含对票证的引用和其他一些健全性检查。
我的问题是,当我尝试使用mercurial队列时,像qnew
这样的命令会尝试运行这些钩子并且其中一个检查失败,我看到histedit
和类似的问题一样扩展。
为什么用这些命令执行pretxncommit挂钩?他们是否会进行某种内部提交?
如何才能使这些挂钩仅在提交时运行?
答案 0 :(得分:2)
是的,qnew会创建一个真实提交,从而调用所有相关的提交挂钩。您可以通过在应用MQ补丁并查看日志时临时禁用MQ来自行确认。
没有办法让pretxncommit钩子只适用于某些命令,除非陪审团操纵其他钩子:
$ cat .hg/hgrc
[hooks]
pre-qnew = touch .hg/skiphook
post-qnew = rm .hg/skiphook
pretxncommit = test -e .hg/skiphook || echo not skipping
$ hg rm README # make some change
$ hg qnew asdf # no hook
$ hg qpop
$ hg rm README
$ hg ci -m asdf
not skipping
这里我们的pretxncommit钩子确保在运行其(普通)钩子之前不存在特定文件,并且前/后qnew钩子创建文件并清理它。
答案 1 :(得分:1)
https://stackoverflow.com/a/19349636/350713中的abort_commit_to_wrong_branch
功能
显示了仅在“实际”提交而不是MQ提交上运行挂钩的方法。
我们的想法是在_committingpatch
中检查属性repo
。
如果repo
具有'_committingpatch'属性,则它是正在进行的MQ提交。
相关的行是
if hasattr(repo, "_committingpatch"):
这在函数newcommit
中提到
http://hg.intevation.org/mercurial/crew/file/7032dcff290c/hgext/mq.py#l293
答案 2 :(得分:0)
或者(可能是谵妄) - 当你使用MQ时,你总是使用qtip,不是吗?
>hg parents
...
tag: qtip
tag: tip
..