Mercurial крючок, который работает как «changegroup», но только на толчок? - PullRequest
4 голосов
/ 19 января 2012

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

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

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

Ответы [ 2 ]

2 голосов
/ 19 июня 2012

Ради полноты, вот сценарий, который будет работать (согласно ответу @ 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
2 голосов
/ 19 января 2012

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

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

...