Общие типы крючков Subversion

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

Ответ 1

Я использую hook 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 

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

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

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

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

Ответ 8

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

Ответ 9

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

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

[email protected],[email protected],[email protected]

Вот код крюка:

@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%[email protected] >> "%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

Ответ 10

Наиболее распространенным я считаю, что люди могут изменять комментарии редакции после того, как они приходят.

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

Ответ 11

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

Ответ 12

Мы проверяем следующие скрипты:

  • Сообщено сообщение журнала фиксации
  • То, что рецензент был указан для фиксации
  • То, что автоматически не сгенерированный код или запрещенные типы файлов не попадают в репозиторий
  • Отправка электронной почты при создании ветки/тега

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

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

Ответ 13

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

Ответ 14

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

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

Ответ 15

Ключ предварительной фиксации 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

Ответ 16

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