Я хотел отредактировать комментарий журнала в браузере репозитория и получил сообщение об ошибке, что для репозитория не существует крючка предварительного переопределения. Кроме того, у вас есть страшное имя, что такое переобучение переопределения, и как его создать?
Что такое привязка pre-revprop-change в SVN и как его создать?
Ответ 1
В основном это script, который запускается до того, как измененное свойство изменено в репозитории, чтобы вы могли более точно управлять тем, что происходит в вашем репозитории.
В SVN-дистрибутиве есть шаблоны для разных крючков, которые находятся в подкаталоге /hooks (*.tmpl, который вам нужно изменить и переименовать в зависимости от вашей ОС, чтобы активировать).
Ответ 2
Для Windows здесь ссылка на примерный пакетный файл, который разрешает только изменения в сообщении журнала (а не другие свойства):
http://ayria.livejournal.com/33438.html
Скопируйте код ниже в текстовый файл и назовите его pre-revprop-change.bat
и сохраните его в подкаталоге \hooks
для вашего репозитория.
@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
Ответ 3
Вот ссылка на вопрос о переполнении стека со многими обычными перехватами Общие типы подкаталогов Subversion, включая исходный источник pre-revprop-change
hook для Windows cross- размещен здесь.
Вы должны сослаться туда, поскольку со временем они могут улучшиться.
Ответ 4
Спасибо #patmortech
И я добавил ваш код, который "только тот же пользователь может изменить свой код".
:: Only allow editing of the same user.
for /f "tokens=*" %%a in (
'"%VISUALSVN_SERVER%\bin\svnlook.exe" author -r %revision% %repository%') do (
set orgAuthor=%%a
)
if /I not "%userName%" == "%orgAuthor%" goto ERROR_SAME_USER
Ответ 5
Чтобы Linux разрешал выпуск комментария журнала,
- найдите файл
pre-revprop-change.tmpl
в каталогеhooks
вашего репозитория - скопируйте файл в тот же каталог, переименовав его в
pre-revprop-change
- предоставить разрешение на выполнение файла (для пользователя сервера, например
www-data
)
Отредактировано: (благодаря лине)
- после этого вам, возможно, придется отредактировать script, чтобы вернуть значение выхода
0
для вида редактирования, который вы хотите разрешить.
Ответ 6
Название hook script не так страшно, если вы управляете его расшифровкой: переименовать с изменением свойств. Короче говоря, целью pre-revprop-change
hook script является управление изменениями свойств без вершин (ревизий) и отправка уведомлений (например, для отправки электронное письмо при изменении свойства ревизии).
В Subversion существует 2 типа свойств:
- версии (например,
svn:needs-lock
иsvn:mime-type
), которые могут быть установлены в файлах и каталогах, - неперевернутые (ревизионные) свойства (например,
svn:log
иsvn:date
), которые устанавливаются в версиях репозитория.
Версии свойства имеют историю и могут управляться обычными пользователями, у которых есть доступ для чтения/записи в репозиторий. С другой стороны, неверующие свойства не имеют истории и служат в основном для целей обслуживания. Например, если вы совершаете ревизию, она сразу получает svn:date
с временем UTC вашего фиксации, svn:author
с вашим именем пользователя и svn:log
с вашим сообщением журнала фиксации (если вы указали какой-либо).
Как я уже указывал, целью pre-revprop-change
hook script является управление изменениями свойств ревизии. Вы не хотите, чтобы все, у кого есть доступ к репозиторию, могли изменять все свойства ревизии, поэтому изменение свойств ревизии запрещено по умолчанию. Чтобы пользователи могли изменять свойства, вам нужно создать pre-revprop-change
hook.
Самый простой крючок может содержать только одну строку: exit 0
. Это позволит любому аутентифицированному пользователю изменять любое свойство ревизии и не должно использоваться в реальной среде. В Windows вы можете использовать пакетный script или PowerShell script для реализации некоторой логики в пределах pre-revprop-change
hook.
Этот PowerShell script позволяет только изменить свойство svn:log
и запрещает пустые сообщения журнала.
# Store hook arguments into variables with mnemonic names
$repos = $args[0]
$rev = $args[1]
$user = $args[2]
$propname = $args[3]
$action = $args[4]
# Only allow changes to svn:log. The author, date and other revision
# properties cannot be changed
if ($propname -ne "svn:log")
{
[Console]::Error.WriteLine("Only changes to 'svn:log' revision properties are allowed.")
exit 1
}
# Only allow modifications to svn:log (no addition/overwrite or deletion)
if ($action -ne "M")
{
[Console]::Error.WriteLine("Only modifications to 'svn:log' revision properties are allowed.")
exit 2
}
# Read from the standard input while the first non-white-space characters
$datalines = ($input | where {$_.trim() -ne ""})
if ($datalines.length -lt 25)
{
# Log message is empty. Show the error.
[Console]::Error.WriteLine("Empty 'svn:log' properties are not allowed.")
exit 3
}
exit 0
Эта партия script позволяет только пользователю "svnmgr" изменять свойства ревизии:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0
Ответ 7
Для пользователей ПК: Расширение .bat не работало для меня при использовании при обработке Windows Server. Я использовал VisualSvn, как предложил Django Reinhardt, и создал крючок с расширением .cmd.