Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
hgbook.pdf
Скачиваний:
52
Добавлен:
17.03.2015
Размер:
3.15 Mб
Скачать

Обработка событий в репозитории с помощью ловушек

Когда кто-то отправляет изменения на сервер, с которого все их забирают, то сервер проверит ревизию, прежде чем она будет принята как постоянная, и отвергнет его, если ревизия не пройдёт испытаний. Если человек только забирает изменения с этого фильтрующего сервера, то у него будет уверенность, что все им забираемые изменения были автоматически проверены.

10.3. Краткое руководство по использованию ловушек

Писать ловушки Mercurial легко. Давайте начнем с ловушки, которая запускается при окончании hg commit, и просто печатает хэш только что созданной ревизии. Ловушка вызывается commit (фиксацией).

Все ловушки работают по той же схеме, что и пример

$ hg init hook-test $ cd hook-test

$ echo '[hooks]' >> .hg/hgrc

$ echo 'commit = echo committed $HG_NODE' >> .hg/hgrc $ cat .hg/hgrc

[hooks]

commit = echo committed $HG_NODE $ echo a > a

$ hg add a

$ hg commit -m 'testing commit hook'

committed df3f65052fb97482958fed9fde988a6550da98fc

Вы добавляете запись в разделе hooks вашего ~/.hgrc. Слева находится название действия на которое он сработает; справа действие которое следует предпринять. Как вы видите, вы можете запустить произвольные команды оболочки в ловушке. Mercurial передаёт дополнительную информацию ловушке через переменные окружения (ищите HG_NODE в примере).

10.3.1. Выполнение нескольких действий на событие

Довольно часто вы хотелось бы задать более чем одну ловушку для определенного рода событий, как показано ниже.

$ echo 'commit.when = echo -n "date of commit: "; date' >> .hg/hgrc $ echo a >> a

$ hg commit -m 'i have two hooks'

committed 95279e34c052b63a7ffa8778ae428644dd2071a6 date of commit: Thu Feb 2 14:09:53 GMT 2012

Mercurial позволяет сделать это путем добавления расширения к концу имени ловушки. Вы расширяете имя ловушки, добавляя к названию ловушки (после «.») произвольный текст. Например, Mercurial будет работать как с commit.foo, так и с commit.bar при событии фиксации (commit).

Чтобы задать четкий порядок выполнения, когда есть несколько ловушек, определенных для события, Mercurial сортирует ловушки в по расширению, и выполняет команды ловушки в этом порядке сортировки. В приведенном выше примере, он будет выполнять в следующем порядке commit, commit.bar, commit.foo.

Это хорошая идея использовать несколько описательных расширений при определении новых ловушек. Это поможет вам вспомнить для чего эта ловушка. Если ловушка не выполнилась, вы получите сообщение об ошибке, которое содержит имя и расширение ловушки, поэтому использование описательных расширений могло бы сразу дать вам намек на то, почему не сработала ловушка (смотрите раздел Раздел 10.3.2, «Управление возможностью выполнения действия» для примера).

10.3.2. Управление возможностью выполнения действия

В наших предыдущих примерах мы использовали ловушку commit, которая запускается после завершения фиксации. Это одна из нескольких ловушек Mercurial, которые выполняются после того, как действие произошло. Такие ловушки не имеют возможности влиять на само действие.

112

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]