Распространенные типы крюков Subversion - PullRequest
39 голосов
/ 08 августа 2008

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

Ответы [ 16 ]

63 голосов
/ 16 сентября 2008

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

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

Единственная сложность заключалась в том, чтобы иметь возможность фактически разобрать stdin из пакетный файл ... Это делается здесь с помощью команды 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 
8 голосов
/ 05 сентября 2008

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

4 голосов
/ 27 августа 2008

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

3 голосов
/ 26 января 2012

Для тех, кто ищет 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.

3 голосов
/ 27 августа 2008

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

  • интеграция с трекером ошибок ( Trac в нашем случае - сообщение о фиксации, которое говорит, что 'Closes # 514' автоматически помечает эту ошибку как закрытую
  • интеграция с интеграцией сборки ( buildbot в нашем случае - фиксация в отслеживаемой ветви запускает сборку
  • pre-commit hook для проверки коммита - мы используем svnchecker . Он проверяет наш код Python на PEP8 правильность
  • отправка сообщений о регистрации в список рассылки
  • выполнение скриптов отступа
3 голосов
/ 08 августа 2008

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

1 голос
/ 02 сентября 2010

ловушка 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
1 голос
/ 10 сентября 2008

Это обсуждалось в списке рассылки пользователей subversion некоторое время назад. В этом сообщении есть несколько полезных идей.

1 голос
/ 09 августа 2008

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

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

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

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

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

0 голосов
/ 05 сентября 2011

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

...