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