Хук Mercurial Changegroup зависит от ветки

Существует ли в Mercurial хук, который, как и changegroup, позволяет выполнять действия при нажатии, но позволяет мне выполнять несколько действий (или изменять их) в зависимости от того, на какие ветки влияют содержащиеся в них наборы изменений?

Например, мне нужно уведомить слушателя по URL-адресу, когда выполняется push, но в идеале он будет уведомлять разные URL-адреса в зависимости от того, какая ветвь затронута, а не просто закрывать их все.


person ziklagx    schedule 22.01.2011    source источник


Ответы (1)


Нет хуков для конкретных веток, но вы можете реализовать эту логику в самом хуке. Например, в вашем hgrc:

[hooks]
changeset = actions-by-branch.sh

а затем в своем actions-by-branch.sh вы бы сделали:

#!/bin/bash
BRANCH=$(hg log --template '{branch}' -r $HG_NODE)
BRANCH=${BRANCH:-default}  # set value to 'default' if it was empty

if [ "$BRANCH" == "default" ] ; then
   do something
elif [ "$BRANCH" == "release" ] ; then
   do something else
else
   do a different thing
fi

Обратите внимание, что я использовал набор изменений, а не хук группы изменений. Одна группа изменений может иметь наборы изменений в нескольких ветвях, что усложнит логику. Если вы все-таки решите пойти по этому пути, вам нужно пройти весь путь от $HG_NODE до tip, чтобы воздействовать на каждый набор изменений в группе изменений.

person Ry4an Brase    schedule 22.01.2011
comment
Я думаю, ${BRANCH:=default} должно быть BRANCH=${BRANCH:=default}. - person palacsint; 16.01.2017
comment
Работает как написано. На справочной странице bash ${parameter:=word} Назначьте значения по умолчанию. Если параметр не установлен или равен нулю, параметру присваивается расширение слова. Затем подставляется значение параметра. Позиционные параметры и специальные параметры не могут быть назначены таким образом. Если бы нам нужен был более подробный оператор присваивания, мы бы использовали :- вместо :=. - person Ry4an Brase; 16.01.2017
comment
Хорошо, я понял проблему. Bash пытается запустить значение $BRANCH как команду. Вот почему я получил сообщение об ошибке mybranchname: command not found. Итак, вам либо нужно задание, либо использовать bash no-op (: ${BRANCH:=default}), чтобы избежать этой ошибки. - person palacsint; 17.01.2017