Dmitriy (r3code) wrote,
Dmitriy
r3code

  • Mood:

Настройка SVN pre-revprop-change hook для Windows

По умолчанию изменение текста сообщения к ревизии не разрешено.
В *nix системах для включения этой функции достаточно в каталоге hooks хранилища переименовать файл pre-revprop-change.tmpl в pre-revprop-change.

В Windows так просто сделать невозможно, так как скрипт в файле написан для bash, а в Windows на нужен батник. Для включения этой возможности в хранилище SVN установленном в Windows, необходимо в каталог hooks хранилища положить файл pre-revprop-change.bat


rem ***************************************************
rem pre-revprop-change.bat (pre-revprop-change hook)
rem Enable revision log message change.

@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5

:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME

:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION

:: Make sure that the new svn:log message is not empty.
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 messages are not allowed. >&2
goto ERROR_EXIT

:ERROR_PROPNAME
echo Only changes to svn:log messages 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

rem ***********************************************************

Найдено на просторах Интернета.

Синхронизация хранилищ, те же грабли


Хочу синхронизовать локальное хранилище с основным, а svnsync говорить низя ибо pre-revprop-change позвращает код не 0.
Да так и получается, потомучто action при синхронизации другой и скриптом не обрабатывается.

Решение в лоб (временно-постоянное опасное)


Оставляем в pre-revprop-change.bat на зеркале
Только такую строку:
exit /b 0

Теперь любое действие разрешено и синхронизация пойдет, только и любое дроугое действие тоже сработает, а это опасно.

Решение с заковыкой


Можно усовешенстовать скрипт, чтобы при синхронизации он работал по другому.
Для определения что идет синхронизация нужно в какой либо переменной получить эту информацию.
Создаем для синхронизации новое имя syncuser.
Добавляем в начало скрипта:
rem Syncing. Exit with ok
if %userName%='syncuser' (
  exit /b 0
)


Tags: apache, svn, программирование, технические заметки
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 9 comments