Скрипты ловушек, выполняемые на стороне сервера

Ловушка - это программа, запускаемая по какому-либо событию в хранилище, такому как создание новой ревизии или изменение неверсированного свойства. Каждой ловушке передаётся достаточно информации для того, чтобы узнать, что это за событие, какие объекты затронуты, а также имя пользователя, инициировавшего событие. В зависимости от вывода или возвращаемого значения ловушки, программа ловушки может продолжить действие, прекратить его, или приостановить некоторым образом. За дополнительной информацией о реализованных ловушках обращайтесь, пожалуйста, к главе Hook Scripts (Скрипты ловушек) в книге о Subversion.

Эти скрипты ловушек выполняются сервером, на котором расположено хранилище. TortoiseSVN также позволяет настроить скрипты ловушек, выполняемые локально клиентом при наступлении определённых событий. Для получения дополнительной информации смотрите «Скрипты ловушек, выполняемые на стороне клиента».

Примеры скриптов ловушек вы можете найти в папке hooks хранилища. Эти скрипты подходят для серверов Unix/Linux, но они должны быть модифицированы, если у вас Windows-сервер. Ловушка может быть как пакетным, так и исполняемым файлом. Пример ниже показывает пакетный файл, который может быть использован для реализации ловушки pre-revprop-change (перед-изменением-свойства_ревизии).

rem Only allow log messages to be changed.
rem Допускать изменения только сообщений журнала.
if "%4" == "svn:log" exit 0
echo Property '%4' cannot be changed >&2
exit 1
    

Заметьте, что всё, посылаемое в stdout, отбрасывается. Если вы желаете, чтобы в диалоге 'Фиксация отклонена' появилось сообщение, вам надо послать его в stderr. В пакетном файле это достигается при помощи >&2

Переопределение ловушек

Если скрипт ловушек отклоняет вашу фиксацию, то его решение окончательно. Но вы можете создать механизм переопределения внутри самого скрипта используя технику Волшебное Слово. Если скрипт хочет отклонить операцию, то он сначала ищет в сообщении журнала специальную фразу, либо заданную фразу, либо имя файла с префиксом. Если он находит волшебное слово, то поволяет фиксации выполнится. Если фраза не найдена, то он может блокировать фиксацию с сообщением «You didn't say the magic word». :-)