Как установить триггер для предотвращения коммитов в SVN со свойством mergeinfo?
Я хотел бы избежать создания свойства svn mergeinfo для чего угодно, кроме корня ветвей. У нас есть ствол и несколько других веток.
Предполагая, что я абсолютно ничего не знаю о триггерах svn, какие шаги мне нужно выполнить, чтобы настроить хук предварительной фиксации, который предотвращает добавление свойств mergeinfo ни к чему, кроме корня ветвей?
Ствол находится в базе репозитория "/trunk", а все ветки находятся в "/branch /foo"
2 ответа
По сути, вам нужно определить хук SVN перед фиксацией. Сначала прочитайте о крючках в целом.
Вы, вероятно, захотите начать с копирования файла pre-commit.tmpl в pre-commit
и реализовать логику там.
Скорее всего, вы захотите проверить разницу в текущей выполняющейся транзакции для строк, таких как: Added: svn:mergeinfo
Поскольку информация о том, к какому файлу он был добавлен, находится в другой строке, вам может потребоваться более сложный инструмент обработки, чем grep - возможно, простой скрипт на Perl.
Когда вы определите, что транзакция имеет добавленное свойство, которое вам не нужно, вы можете заблокировать фиксацию; или, если вы особенно смелы, вы можете попытаться изменить транзакцию и продолжить.
Следующее должно работать. В вашем репозитории уже есть svn:mergeinfo на стволе, так что вы никогда не захотите, чтобы кто-нибудь снова его добавил.
Кстати, наш фактический хук также гарантирует, что каждый коммит сопровождается сообщением журнала, а также защищает от удаления некоторых из наших важных каталогов верхнего уровня через браузер репо.
@echo off
set logfile=%TEMP%\%2.txt
"c:\program files\subversion\svnlook" log -t %2 %1 > %logfile%
for /f "tokens=1,2*" %%i in (%logfile%) do (
if %%i==UU goto checkmergetracking
)
for /f "tokens=1,2*" %%i in (%logfile%) do (
if %%i==_U goto checkmergetracking
)
del %logfile%
exit 0
:checkmergetracking
"c:\program files\subversion\svnlook" diff -t %2 %1 > %logfile%
find "Added: svn:mergeinfo" %logfile%
if ERRORLEVEL 1 goto nomergeinfo
del %logfile%
echo "Addition of Merge Info Not Allowed" >&2
exit 1
:nomergeinfo
del %logfile%
exit 0