像'changegroup'一样操作的Mercurial钩子,但仅限于推送?

时间:2012-01-18 23:03:53

标签: mercurial hook dvcs hgrc

我们已经构建了一个变更集传播机制,但它依赖于捆绑和分拆新的变更集。如果我们使用changegroup钩子,那么它会导致循环行为,因为钩子运行during a pull, push, or unbundle。我们需要的是在提交后进行同步,commit挂钩完美地工作,但也在推送之后。

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

是否有任何钩子可以这样工作?

2 个答案:

答案 0 :(得分:2)

检查source argument到钩子。当您通过HTTP(S)或SSH进行变更集时,当您分组变更组bundle时,serve,当通过推送进入变更集时push本地文件系统上的存储库。

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

答案 1 :(得分: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