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

Ловушка - это программа, запускаемая по какому-либо событию в хранилище, такому как создание новой ревизии или изменение неверсированного свойства. Каждой ловушке передаётся достаточно информации для того, чтобы узнать, что это за событие, какие объекты затронуты, а также имя пользователя, инициировавшего событие. В зависимости от вывода или возвращаемого значения ловушки, программа ловушки может продолжить действие, прекратить его, или приостановить некоторым образом. За дополнительной информацией о реализованных ловушках обращайтесь, пожалуйста, к главе 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

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

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