Хуки срабатывают на разные события Subversion, вот некоторые из них:
- start-commit — запускается до начала транзакции, может быть использован для проверки прав.
- pre-commit — запускается в конце транзакции, но до commit, часто используется для валидации данных, например для проверки не пустых лог-собщений.
- post-commit — запускается после транзакции, может быть использовано для отправки e-mail или для резервирования хранилища.
- pre-revprop-change — запускается до изменений в ревизии, могут быть использованы для проверки доступа.
- post-revprop-change — запускается после изменений в ревизии, могут быть использованы для отправки e-mail или для резервирования изменений.
- Есть еще «post-lock», «post-unlock», «pre-lock» и «pre-unlock», как видно из названий он срабатывают при блокировке.
Самый интересный из всех - это конечно "pre-commit". Именно в этот момент мы имеем весь текст транзакции, можем ее обработать или даже изменить.
Хук должен находится на сервере svn в папке "hooks", файл прекоммита называется "pre-commit.bat". Т.е. предполагается, что хук будет на батниках, к которым у меня хроническая нелюбовь. Так что мой батник будет вызывать vbs, а вся логика будет в вбсине.
Часть 1: батник, вызывающий VBS:
SETLOCAL SET PATH=C:\Windows;C:\Windows\system32;C:\Program Files\VisualSVN Server\bin; cscript.exe //NoLogo D:\Repositories\TradingSystem\hooks\pre-commit.wsf %1 %2 IF %ERRORLEVEL% EQU 1 GOTO fail IF %ERRORLEVEL% EQU 2 GOTO fail2 :success EXIT 0 :fail echo Введите описание к commit! 1>&2 EXIT 1 :fail2 echo Обнаружено не закрытое подключение к базе! 1>&2 EXIT 1Где "C:\Program Files\VisualSVN Server\bin" - путь до исполняемых файлов сервера SVN
"D:\Repositories\TradingSystem\hooks\pre-commit.wsf" - путь до запускаемого скрипта VBS
Т.е. роль нашего bat файла, вызвать VBS с параметрами и получить код возврата.
Сам VBS под катом: