Как установить триггер для предотвращения фиксации в SVN с помощью свойства mergeinfo?

StackOverflow https://stackoverflow.com/questions/2004981

  •  18-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

В принципе, вам нужно определить SVN предварительная фиксация крюк.Однако сначала прочтите о крючки в целом.

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

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

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

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

Другие советы

Следующее должно сработать.В вашем репозитории уже есть svn: mergeinfo на магистрали, поэтому вы никогда не захотите, чтобы кто-либо добавлял его снова.

Кстати, наш фактический хук также гарантирует, что каждая фиксация сопровождается сообщением журнала, а также защищает от удаления некоторых из наших важных каталогов верхнего уровня через repo browser.

@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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top