Имя скрипта ловушки не так страшно, если вам удастся расшифровать его: это ловушка изменения свойства до ревизии . Вкратце, цель хук-скрипта pre-revprop-change
состоит в том, чтобы контролировать изменения неверсионных (ревизионных) свойств и отправлять уведомления (например, отправлять электронную почту при изменении свойства ревизии).
В Subversion есть 2 типа свойств:
- версионные свойства (например,
svn:needs-lock
и svn:mime-type
), которые можно установить для файлов и каталогов,
- неверсионные (ревизионные) свойства (например,
svn:log
и svn:date
), установленные в репозитории ревизии .
Версионные свойства имеют историю и могут управляться обычными пользователями, которые имеют доступ на чтение / запись к репозиторию. С другой стороны, неверсированные свойства не имеют никакой истории и служат в основном для целей обслуживания. Например, если вы фиксируете ревизию, она немедленно получает svn:date
с временем UTC вашего коммита, svn:author
с вашим именем пользователя и svn:log
с вашим сообщением в журнале фиксации (если вы его указали).
Как я уже указывал, цель хук-скрипта pre-revprop-change
состоит в том, чтобы контролировать изменения свойств ревизии. Вы не хотите, чтобы все, кто имеет доступ к хранилищу, могли изменять все свойства ревизии, поэтому изменение свойств ревизии по умолчанию запрещено. Чтобы позволить пользователям изменять свойства, вы должны создать pre-revprop-change
hook.
Самый простой хук может содержать только одну строку: exit 0
. Это позволит любому аутентифицированному пользователю изменять любое свойство ревизии, и его не следует использовать в реальной среде. В Windows вы можете использовать пакетный сценарий или сценарий на основе PowerShell для реализации некоторой логики в pre-revprop-change
hook.
Этот скрипт 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