我们已经构建了一个变更集传播机制,但它依赖于捆绑和分拆新的变更集。如果我们使用changegroup
钩子,那么它会导致循环行为,因为钩子运行during a pull, push, or unbundle。我们需要的是在提交后进行同步,commit
挂钩完美地工作,但也在推送之后。
请注意,post-push
挂钩不是答案,因为当您将从该存储库推送到另一个存储库时,它就会运行。此方案基本上调用changegroup
的特殊行为,仅在新变更集是推送结果时运行。
是否有任何钩子可以这样工作?
答案 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