Распространенные типы Subversion Hooks

Какие виды скриптов используются людьми для Subversion? Просто общие идеи, но код тоже был бы великолепен!

16 ответов

Я использую pre-revprop-change хук, который позволяет фактически возвращаться и редактировать комментарии и такую ​​информацию после выполнения коммита. Это очень полезно, если в комментариях к коммиту отсутствует / ошибочная информация.

Здесь я размещаю pre-revprop-change.bat пакетный файл для Windows NT или более поздней версии... Вы, безусловно, можете улучшить его с помощью дополнительных модификаций. Вы также можете получитьpost-revprop-change.cmd из него сделать резервную копию старого snv:log где-нибудь или просто добавить его в новый журнал...

Единственная сложность была в том, чтобы иметь возможность фактически анализировать стандартный ввод из командного файла... Это делается здесь с помощью FIND.EXE команда.

Другой это то, что у меня были сообщения от других пользователей о проблемах с использованием /b с exit команда. Вам может понадобиться просто удалить это /b в вашем конкретном приложении, если ошибки не ведут себя хорошо.

@ECHO OFF

set repos=%1
set rev=%2
set user=%3
set propname=%4
set action=%5

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow changes to svn:log. The author, date and other revision
:: properties cannot be changed
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Only allow modifications to svn:log (no addition/overwrite or deletion)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if /I not '%action%'=='M' goto ERROR_ACTION

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
 set bIsEmpty=false
)
if '%bIsEmpty%'=='true' goto ERROR_EMPTY

goto :eof



:ERROR_EMPTY
echo Empty svn:log properties are not allowed. >&2
goto ERROR_EXIT

:ERROR_PROPNAME
echo Only changes to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1 

Если у вас есть смесь пользователей Unix и Windows, работающих с хранилищем, я призываю вас использовать сценарий предварительной фиксации case-insensitive.py в качестве меры предосторожности. Это предотвращает сложные ситуации, когда обновления svn не удаются для пользователей Windows из-за переименования файла, которое только изменило регистр имени файла. Поверьте, есть большая вероятность, что это избавит вас от неприятностей.

Мы используем FogBugz для отслеживания ошибок, он предоставляет скрипты фиксации Subversion, которые позволяют вам включить номер дела в вашу проверку в комментариях, а затем связывают ошибку с проверкой, в которой это исправлено. Он требует, чтобы экземпляр WebSVN был настроен таким образом, чтобы у вас был веб-просмотрщик для вашего хранилища.

Несколько вещей, которые мы используем для них:

  • интеграция с трекером ошибок ( в нашем случае Trac - сообщение коммита "Closes #514" автоматически помечает эту ошибку как закрытую)
  • интеграция с интеграцией сборки ( в нашем случае buildbot - фиксация наблюдаемой ветви запускает сборку
  • хук pre-commit для проверки коммита - мы используем svnchecker. Это проверяет наш код Python на правильность PEP8
  • отправка сообщений о регистрации в список рассылки
  • запуск скриптов отступа

Для тех, кто ищет pre-revprop-change.bat для операции snvsync:

https://gist.github.com/1679659

@ECHO OFF

set user=%3

if /I '%user%'=='syncuser' goto ERROR_REV

exit 0

:ERROR_REV echo "Only the syncuser user may change revision properties" >&2
exit 1

Это просто происходит здесь: http://chestofbooks.com/computers/revision-control/subversion-svn/Repository-Replication-Reposadmin-Maint-Replication.html и адаптировано для Windows.

На моем рабочем месте мы установили хук пост-фиксации, который генерирует RSS-каналы, которые отображаются на различных панелях мониторинга и используются для рецензентов кода, чтобы знать, когда пора рецензировать, и для нас, чтобы увидеть, что новые сотрудники совершают достаточно,

Ловушка post-commit для отправки уведомления по электронной почте о том, что что-то изменилось в хранилище, в список писем. Вам нужен sendmail.exe в той же папке, что и файл хука, вместе с sendmail.ini.

Вам также нужен файл post-commit.tos.txt рядом с вашим post-commit.cmd для составления списка получателей почты. Файл должен содержать:

user1@example.com,user2@example.com,user3@example.com

Вот код хука:

@ECHO OFF
setlocal

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Get subversion arguments
set repos=%~1
set rev=%2

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Set some variables
set tos=%repos%\hooks\%~n0.tos.txt
set reposname=%~nx1
set svnlookparam="%repos%" --revision %rev%

if not exist "%tos%" goto :END

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Prepare sendmail email file
set author=
for /f "tokens=* usebackq" %%g in (`svnlook author %svnlookparam%`) do (
  set author=%%g
)

for /f "tokens=* usebackq delims=" %%g in ("%tos%") do (
  set EmailNotificationTo=%%g
)
set SendMailFile=%~n0_%reposname%_%rev%.sm

echo To: %EmailNotificationTo% >> "%SendMailFile%"
echo From: %reposname%.svn.technologie@gsmprjct.com >> "%SendMailFile%"
echo Subject: [%reposname%] Revision %rev% - Subversion Commit Notification  >> "%SendMailFile%"

echo --- log [%author%] --- >> "%SendMailFile%"
svnlook log %svnlookparam% >> "%SendMailFile%" 2>&1
echo --- changed --- >> "%SendMailFile%"
svnlook changed %svnlookparam% --copy-info >> "%SendMailFile%" 2>&1

echo .>> "%SendMailFile%"

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Send email
type "%SendMailFile%" | "%~dp0sendmail.exe" -t

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Clean-up
if exist "%SendMailFile%" del "%SendMailFile%"


:END
endlocal

Это обсуждалось в списке рассылки пользователей Subversion некоторое время назад. Этот пост, в частности, имеет несколько полезных идей.

Я использую перехваты пост-фиксации ( я думаю, что это один), чтобы публиковать сообщения на форуме по Basecamp для каждого коммита. Два преимущества:

  1. Как ведущий разработчик, я получаю сводку коммитов каждое утро (через RSS-канал с этого форума basecamp) и могу довольно быстро увидеть, чем занималась моя команда.

  2. Наша установка Trac/SVN находится за нашим брандмауэром, так что это дает моим руководителям в других местах представление о том, что мы делаем. Они могут не понимать этого, но для менеджера большая активность выглядит, ну, как много активности;)

Я думаю, что конечный результат этого похож на то, что делает @Aviv.

Я ищу решения для построения последнего коммита на отдельном сервере для непрерывной интеграции, но мне придется изменить способ внесения изменений в нашу схему базы данных, прежде чем это сработает.

Хук предварительной фиксации Windows для проверки того, что журнал содержит что-то.

@ECHO OFF
setlocal

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Get subversion arguments
set repos=%~1
set txn=%2

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Set some variables
set svnlookparam="%repos%" -t %txn%

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Make sure that the new svn:log message contains some text.
set bIsEmpty=true
for /f "tokens=* usebackq" %%g in (`svnlook log %svnlookparam%`) do (
   set bIsEmpty=false
)
if '%bIsEmpty%'=='true' goto ERROR_EMPTY

echo Allowed. >&2

goto :END


:ERROR_EMPTY
echo Empty log messages are not allowed. >&2
goto ERROR_EXIT

:ERROR_EXIT
:: You may require to remove the /b below if your hook is called directly by subversion
exit /b 1

:END
endlocal

Я забыл ввести комментарий при совершении. У меня не было времени выяснить, почему мой хук pre-revprop-change не работал. Поэтому следующая команда svnadmin сработала для ввода сообщения коммита: svnadmin setlog <filesystem path to my repository> --bypass-hooks -r 117 junkгде "мусор" - это файл, содержащий текст, который я хотел бы использовать в качестве комментария. svn setlog help имеет больше информации об использовании...

Мы используем скрипт commit hook для запуска нашего релиз-робота. Запись новой информации о выпуске в файл с именем changes.txt в наших различных продуктах приведет к созданию тега и соответствующих артефактов.

Я думаю, что наиболее распространенным из них является предоставление людям возможности изменять комментарии к ревизии после внесения изменений.

Вам нужно включить скрипт подключения pre-revprop-change, чтобы разрешить это. Приведенный пример, если включен, позволяет редактировать только свойство комментария и быть только оригинальным комиттером Отлично подходит для исправления опечаток.

Хук, чтобы уведомить систему управления ошибками / проблемами об изменениях в репозитории. То есть. сообщение коммита имеет ошибку:546 или похожий тег, который анализируется и подается в систему управления ошибками.

Мы проверяем следующее с помощью наших скриптов ловушек:

  • Что было передано сообщение журнала фиксации
  • Что рецензент был указан для коммита
  • Отсутствие автоматически сгенерированного кода или запрещенных типов файлов в хранилище.
  • Отправить электронное письмо при создании ветки / тега

Мы все еще хотим реализовать следующее:

  • Отправить электронное письмо, когда пользователь получает блокировку файла
  • Отправить письмо, когда ваш замок был украден
  • Отправить всем по электронной почте, когда свойство ревизии было изменено

У меня есть одна установка с использованием библиотеки Ruby Tinder, которую я отправляю в комнату для разведения костра, если кому-то нужен сценарий, который я могу опубликовать или отправить вам код.

Другие распространенные сообщения, которые я видел, - это сообщения об ошибках и системы уведомлений по электронной почте.

Другие вопросы по тегам