Назва сценарію гачка не така страшна, якщо вам вдасться розшифрувати його: це попередньо переглянути властивість зміни гачка . Коротше кажучи, мета 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
гачок.
Найпростіший гачок може містити тільки один рядок: 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