【问题标题】:How to disable pretxncommit hooks with mercurial queues or histedit?如何使用 mercurial 队列或 histedit 禁用 pretxncommit 挂钩?
【发布时间】:2011-10-04 14:40:44
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mercurial mercurial-hook mercurial-queue


    【解决方案1】:

    是的,一个 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 钩子确保特定文件在运行其(普通)钩子之前不存在,并且 pre-/post-qnew 钩子创建文件并清理它。

    【讨论】:

    • 我认为这个解决方案没有意义,它有点像 hack。另一方面,你会认为你可以解决这个问题: pre-commit = do-your-hook pre-qfinish = do-your-hook 但 pre-qfinish 似乎并没有阻止 qfinish :-\
    【解决方案2】:

    https://stackoverflow.com/a/19349636/350713 中的函数 abort_commit_to_wrong_branch 展示了一种仅在“真实”提交而不是 MQ 提交上运行挂钩的方法。 这个想法是在repo 中检查属性_committingpatch

    如果repo 具有“_committingpatch”属性,则它是一个正在进行的 MQ 提交。 相关行是

    if hasattr(repo, "_committingpatch"):
    

    这在函数newcommit中提到 http://hg.intevation.org/mercurial/crew/file/7032dcff290c/hgext/mq.py#l293

    【讨论】:

      【解决方案3】:
      • pretxncommit 适用于 repo 内的所有更改(可记录)
      • 如果您想忽略 mq 操作,您可以查找变更集父项并查看其是否为后代 qparent/qbase 标记或参见 WC。嗯。像(从头部弄脏,而不是从测试) hg id -tr 。

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

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

      【讨论】:

      • 如果钩子作为 mq 操作运行,您是否要自行检查钩子,如果是,则中止它们?
      • 是的,但不是中止,而是以良好的错误级别退出。顺便说一句,即使在这种情况下,发现比回答 -qfinish 还要晚
      猜你喜欢
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多