среда, 30 мая 2012 г.

Хуки на SVN: pre-commit хук на VBS

Хук - это набор команд на определенное действие с репозиторием SVN.

Хуки срабатывают на разные события 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 под катом: