Какими сценариями крюка являются люди, использующие 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
имеет больше информации об использовании...