【问题标题】:Mercurial hook that operates like 'changegroup', but only on push?像“changegroup”一样运行的 Mercurial 钩子,但仅在推送时?
【发布时间】:2012-01-18 23:03:52
【问题描述】:

我们已经构建了变更集传播机制,但它依赖于捆绑和解绑新变更集。如果我们要使用changegroup 钩子,那么它会导致循环行为,因为钩子运行during a pull, push, or unbundle。我们需要的是在提交后完成同步,commit 钩子非常适合,但在 push 之后也是如此。

注意,post-push 钩子不是答案,因为它是在您将 该存储库推送到另一个时运行的。基本上,此场景调用 changegroup 的特殊行为,仅在新变更集是推送的结果时运行。

有没有这样的钩子?

【问题讨论】:

    标签: mercurial hook mercurial-hook hgrc


    【解决方案1】:

    检查source argument 到钩子。 bundle 当你解绑一个变更组时,serve 当变更集通过 HTTP(S) 或 SSH 进来时,push 当它通过推送到本地文件系统上的存储库进来时.

    您会发现此参数是作为外部进程运行的挂钩的HG_SOURCE 环境变量,以及作为进程内挂钩的source 关键字参数。

    【讨论】:

    • 感谢您的回答。事实上,我已经编写了一个小的 Python 脚本来实现这一点。然而,我面临的困境是我们的开发团队使用的是 Windows 系统,而我对于坚持在所有服务器上安装 Python 犹豫不决。我可以写一个.bat 文件或无需外部依赖即可运行的东西吗?
    • 经过进一步实验,TortoiseHG 似乎嵌入了 Python (duh),并使用其内部 Python 运行时运行挂钩 - 因此您不必使用 .bat 文件。
    【解决方案2】:

    为了完整起见,这里有一个可以工作的脚本(根据@MartinGeisler 的回答)。我们就叫它pushhook.py

    def pushhook(ui, repo, source=None, **kwargs):
        if source == 'push':
            # Perform push-only operations here
    

    hgrc 看起来像:

    [hooks]
    changegroup.push = python:.hg/pushhook.py:pushhook
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      相关资源
      最近更新 更多