如何使用mercurial队列或histedit禁用pretxncommit钩子?

时间:2011-10-04 14:40:45

标签: mercurial mercurial-hook mercurial-queue

我在本地mercurial存储库中有一些pretxncommit挂钩,这些挂钩用于检查提交消息是否包含对票证的引用和其他一些健全性检查。

我的问题是,当我尝试使用mercurial队列时,像qnew这样的命令会尝试运行这些钩子并且其中一个检查失败,我看到histedit和类似的问题一样扩展。

为什么用这些命令执行pretxncommit挂钩?他们是否会进行某种内部提交?

如何才能使这些挂钩仅在提交时运行?

3 个答案:

答案 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)

  • pretxncommit与repo中的所有更改(可录制)一起使用
  • 如果你想忽略mq-operation,你可以查找变更集父项,看看它是否是后代 qparent / qbase标签或在WC看到。水木清华。喜欢(从头上弄脏,而不是从测试中)hg id -tr。

或者(可能是谵妄) - 当你使用MQ时,你总是使用qtip,不是吗?

>hg parents
...
tag:         qtip
tag:         tip
..