Как установить триггер для предотвращения коммитов в 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
Другие вопросы по тегам