Mercurial hook, который работает как "changegroup", но только на толчке?

Мы создали механизм распространения наборов изменений, но он основан на связывании и разделении новых наборов изменений. Если бы мы использовали changegroup hook, тогда это будет вызывать циклическое поведение, потому что hook запускается во время вытягивания, толкания или развязывания. Нам нужно, чтобы синхронизация выполнялась после коммита, который commit крюк отлично работает, но и после толчка.

Обратите внимание post-push Хук не является ответом, так как он запускается, когда вы перемещаетесь из этого хранилища в другое. Этот сценарий требует, в основном, особого поведения changegroup, работает только тогда, когда новые наборы изменений являются результатом нажатия.

Есть ли крюк, который работает таким образом?

2 ответа

Решение

Проверьте исходный аргумент для хука. Это будет bundle когда вы развязываете группу изменений, serve когда набор изменений приходит через HTTP(S) или SSH, и push когда он поступает через отправку в хранилище в локальной файловой системе.

Вы находите этот аргумент в качестве HG_SOURCE переменная окружения для запуска крюка как внешнего процесса, так и как source Ключевой аргумент для перехвата в процессе.

Для полноты картины приведу скрипт, который будет работать (согласно ответу @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
Другие вопросы по тегам