Ответов (16)16
Я думаю, что наиболее распространенный из них - разрешить людям изменять комментарии к ревизии после совершения.
Для этого вам нужно включить скрипт-перехватчик pre-revprop-change. Приведенный пример, если он включен, позволяет редактировать только свойство комментария и быть только исходным коммиттером. Отлично подходит для исправления опечаток.
Для тех, кто ищет 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.
Я использую перехватчики пост-фиксации ( думаю, именно этот ), чтобы публиковать сообщения на форуме Basecamp для каждой фиксации. Два преимущества:
Как ведущий разработчик, я каждое утро получаю сводку коммитов (через RSS-канал с этого форума базового лагеря) и могу довольно быстро увидеть, чем занимается моя команда.
Наша установка Trac / SVN находится за нашим брандмауэром, так что это дает моим руководителям в других местах окно в то, что мы делаем. Они могут этого не понимать, но для менеджера большая активность выглядит, ну, ну, много активности;)
Я предполагаю, что конечный результат этого аналогичен тому, что делает @Aviv.
Я ищу решения для создания последней фиксации на отдельном сервере для непрерывной интеграции, но мне придется изменить способ внесения изменений в схему нашей базы данных, прежде чем это сработает.
Это обсуждалось в списке рассылки пользователей Subversion некоторое время назад. В этом посте, в частности, есть несколько полезных идей.
С помощью наших скриптов ловушек мы проверяем следующее:
- Было предоставлено сообщение журнала фиксации
- Что для фиксации был указан рецензент
- Что в репозитории не попадает автоматически сгенерированный код или запрещенные типы файлов.
- Отправьте электронное письмо, когда будет создана ветка / тег
Мы по-прежнему хотим реализовать следующее:
- Отправлять электронное письмо, когда пользователь блокирует файл
- Отправьте электронное письмо, когда ваш замок украден
- Отправлять всем электронное письмо, когда свойство ревизии было изменено
мы используем их для нескольких целей:
- интеграция с системой отслеживания ошибок ( в нашем случае Trac - сообщение фиксации с надписью Closes # 514 автоматически помечает эту ошибку как закрытую
- интеграция с интеграцией сборки ( в нашем случае buildbot - фиксация отслеживаемой ветки запускает сборку
- ловушка pre-commit для проверки фиксации - мы используем svnchecker . Он проверяет наш код Python на правильность PEP8.
- отправка проверенных писем в список рассылки
- запуск скриптов отступов
Мы используем FogBugz для отслеживания ошибок, он предоставляет скрипты фиксации подрывной деятельности, которые позволяют вам включать номер дела в вашу проверку в комментариях, а затем связывает ошибку с проверкой, которая ее исправила. Это действительно требует настройки экземпляра WebSVN, чтобы у вас была веб-программа просмотра для вашего репозитория.
Если с репозиторием работают как пользователи Unix, так и Windows, я настоятельно рекомендую вам использовать скрипт -перехватчик case-insensitive.py перед фиксацией в качестве меры предосторожности. Это предотвращает трудноразрешимые ситуации, когда обновления svn не работают для пользователей Windows из-за переименования файла, которое изменяет только регистр имени файла . Поверьте, это избавит вас от неприятностей.
У меня есть одна установка с использованием библиотеки Ruby Tinder, которую я отправляю в комнату для костра. Если кому-то нужен сценарий, я могу опубликовать или отправить вам код.
Другие распространенные сообщения, которые я видел, - это сообщения в системах отслеживания ошибок и уведомления по электронной почте.
Я использую pre-revprop-change
ловушку, которая позволяет мне возвращаться и редактировать комментарии и подобную информацию после выполнения фиксации. Это очень полезно, если в комментариях коммита отсутствует / ошибочная информация.
Здесь я размещаю pre-revprop-change.bat
командный файл для Windows NT или новее. Вы, безусловно, можете улучшить его с помощью дополнительных модификаций. Вы также можете получить
post-revprop-change.cmd
от него, чтобы создать резервную копию старого snv:log
или просто добавить его в новый журнал.
Единственная сложная часть заключалась в том, чтобы иметь возможность фактически анализировать stdin из командного файла. Здесь это делается с помощью FIND.EXE
команды.
Другое дело, что у меня были сообщения от других пользователей о проблемах с использованием команды /b
with 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
Хук предварительной фиксации 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
post-commit, чтобы отправить уведомление по электронной почте о том, что что-то изменилось в репозитории, в список писем. Вам нужен sendmail.exe в той же папке, что и ваш файл ловушки, вместе с 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
Я забыл ввести комментарий при фиксации. У меня не было времени понять, почему мой хук перед изменением ревпропа не работал. Таким образом, следующая команда svnadmin сработала для меня, чтобы ввести сообщение о фиксации:,
svnadmin setlog <filesystem path to my repository> --bypass-hooks -r 117 junk
где «мусор» - это файл, содержащий текст, который я хотел сделать комментарием. svn setlog help
есть дополнительная информация об использовании ...