Mercurial hook that operates like 'changegroup', but only on push?

依然范特西╮ 提交于 2020-08-24 10:45:07

问题


We've built a changeset propagation mechanism, but it relies on bundling and unbundling the new changesets. If we were to use the changegroup hook, then it would cause cyclic behaviors, because the hook is run during a pull, push, or unbundle. What we need is for the sync to be done after a commit, which the commit hook works perfectly for, but also after a push.

Note, the post-push hook is not the answer, as it is run when you push from that repository to another. This scenario calls, basically, for a special behavior of changegroup, only running when the new changesets are a result of a push.

Is there any hook that works that way?


回答1:


Check the source argument to the hook. It will be bundle when you're unbundling a changegroup, serve when the changeset comes in over HTTP(S) or SSH, and push when it comes in via a push done to a repository on the local file system.

You find this argument as the HG_SOURCE environment variable for a hook run as an external process, and as the source keyword argument for an in-process hook.




回答2:


For the sake of completeness, here is a script that would work (as per @MartinGeisler's answer). Let's call it pushhook.py:

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

And the hgrc looks like:

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


来源:https://stackoverflow.com/questions/8918822/mercurial-hook-that-operates-like-changegroup-but-only-on-push

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!