Что такое крюк pre-revprop-change в SVN и как его создать?
Я хотел отредактировать комментарий журнала в браузере репозитория и получил сообщение об ошибке, что для репозитория не существует крючка pre-revprop-change. Помимо того, что у вас страшное имя, что такое крючок для изменения pre-revprop и как его создать?
7 ответов:
в основном это скрипт, который запускается до изменения неверсионного свойства в репозитории, чтобы вы могли более точно управлять тем, что происходит в вашем репозитории.
в дистрибутиве SVN имеются шаблоны для различных крючков, расположенные в подкаталоге /hooks (*.tmpl, который вам нужно отредактировать и переименовать в зависимости от вашей ОС, чтобы активировать).
для 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
вот ссылка на вопрос переполнения стека со многими общими крючками общие типы подрывных Крючков, включая исходный источник
pre-revprop-changeкрючок для Windows перекрестно размещен здесь.вы должны ссылаться там, как они могут быть улучшены с течением времени.
для Linux, чтобы разрешить выпуск комментария журнала,
- найдите файл
pre-revprop-change.tmplнаhooksкаталог вашего репозитория- скопируйте файл в тот же каталог, переименовав его в
pre-revprop-change- дать разрешение на выполнение файла (для пользователей сервера, например,
www-data)редактировать: (спасибо Линдес)
- после этого вам, возможно, придется отредактировать скрипт, чтобы вернуть выходное значение
0для тех изменений, которые вы хотите разрешить.
спасибо #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
название скрипта крючка не так страшно, если вам удастся его расшифровать: это крюк изменения свойства предварительной ревизии. Короче говоря, цель
pre-revprop-changehook script предназначен для управления изменениями неверсионных (ревизионных) свойств и отправки уведомлений (например, для отправки электронной почты при изменении свойства ревизии).в Subversion есть 2 типа свойств:
- версионные свойства (например
svn:needs-lockиsvn:mime-type), что может быть установлен на файлы и каталоги,- неверсионные свойства (например,
svn:logиsvn:date), которые установлены в репозитории изменения.Версионные свойства имеют историю и могут управляться обычными пользователями, имеющими доступ на чтение / запись в репозиторий. С другой стороны, неверсированные свойства не имеют никакой истории и служат в основном для обслуживания. Например, если вы зафиксируете ревизию, она сразу же получит
svn:dateС Мирового времени своего совершения,svn:authorС вашим именем пользователя иsvn:logС вашим сообщением журнала фиксации (если вы указали какой-либо).как я уже указывал, цель
pre-revprop-changeХук скрипт предназначен для управления изменениями свойств ревизии. Вы не хотите, чтобы все, кто имеет доступ к репозиторию, могли изменять все свойства редакции, поэтому изменение свойств редакции по умолчанию запрещено. Чтобы разрешить пользователям изменять свойства, необходимо создатьpre-revprop-changeкрюк.в простой крюк может содержать только одну строку:
exit 0. Это позволит любому аутентифицированному пользователю изменить любое свойство ревизии, и оно не должно использоваться в реальной среде. В Windows можно использовать пакетный сценарий или сценарий на основе PowerShell для реализации некоторой логики вpre-revprop-changeкрюк.этот скрипт PowerShell позволяет изменять
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этот пакетный скрипт позволяет только "svnmgr" пользователей, чтобы изменить номер версии свойства:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 ) exit 1 goto :eof :label1 exit 0
для пользователей ПК : Этот.расширение bat не работает для меня при использовании на Windows Server maching. Я использовал VisualSvn, как предложил Джанго Рейнхардт, и он создал крюк с a .расширение УМК.
Comments