문제

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?

도움이 되었습니까?

해결책

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.

다른 팁

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top