Как установить триггер для предотвращения коммитов в SVN со свойством mergeinfo? - PullRequest
2 голосов
/ 05 января 2010

Я бы хотел избегать создания свойства svn mergeinfo ни на чем, кроме корня ветвей. У нас есть ствол и несколько других ветвей.

Предполагая, что я абсолютно ничего не знаю о триггерах svn, какие шаги нужно выполнить, чтобы настроить хук перед фиксацией, который предотвращает добавление свойств mergeinfo ни к чему, кроме корня ветвей?

Магистраль находится в базе репозитория "/ trunk", а все ветки находятся в "/ branch / foo"

Ответы [ 2 ]

3 голосов
/ 05 января 2010

По сути, вам нужно определить хук SVN pre-commit . Сначала прочитайте о хуках вообще .

Вероятно, вы захотите начать с копирования файла pre-commit.tmpl в pre-commit и реализовать там логику.

Вероятно, вы захотите проверить разницу в текущей выполняемой транзакции для строк, подобных Добавлено: svn: mergeinfo

Поскольку информация о том, для какого файла он был добавлен, находится в другой строке, вам может потребоваться более сложный инструмент обработки, чем grep - возможно, простой скрипт на Perl.

Когда вы определите, что транзакция имеет добавленное свойство, которое вам не нужно, вы можете заблокировать фиксацию; или, если вы особенно смелы, вы можете попытаться изменить транзакцию и продолжить.

1 голос
/ 15 октября 2010

Следующее должно работать. В вашем репозитории уже есть 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
...