При написании svn-хуков любого типа, если вам нужна информация о репозитории или о транзакции, вы хотите использовать программу svnlook
из сценария оболочки или использовать svn API на выбранном вами языке. Использование svnlook
быстрее, так как оно обходит весь код SVN RA (удаленного доступа), включая уровень проверок авторизации - поскольку сценарии выполняются в контексте сервера, это не проблема. Кроме того, у вас нет дополнительных затрат на обновление рабочей копии, которую вы не используете для чего-либо, кроме информации о типе файла.
svnlook
содержит множество опций для исследования как ревизий (для перехватов после *), так и транзакций (для пре-транзакций *). Особый интерес здесь представляет опция changed
.
<blockquote>changed: usage: svnlook changed REPOS_PATH
Print the paths that were changed.
Valid options:
-r [--revision] ARG : specify revision number ARG
-t [--transaction] ARG : specify transaction name ARG
--copy-info : show details for copies
</blockquote>
Изменения, которые составили ревизию или транзакцию, отображаются следующим образом:
A trunk/src/new-dir/
A trunk/src/new-dir/newheader.h
A trunk/src/new-dir/newsrc.c
U trunk/src/existingsrc.c
Вывод из svnlook при обращении к каталогу всегда заканчивается на /. Это простой дискриминатор для обнаружения файла или каталога.
Однако, когда дело касается удалений, все становится немного мрачнее. Если каталог удаляется, все содержимое каталога также удаляется, и эта информация не отображается в changed
. Смотрите здесь:
D trunk/src/new-dir/
U trunk/src/existingsrc.c
Основываясь на описании того, на что вы смотрите, я собираюсь предположить, что вы ищете какую-то форму отчетов после фиксации. Если это так, вы можете проверить postver * mail hook_verver . Даже если вы не хотите отправлять результаты по электронной почте, код демонстрирует, как пройти через транзакцию или ревизию изменений с помощью API SVN.