Nazwa skryptu przechwytującego nie jest tak przerażająca, jeśli uda ci się go odszyfrować: jest to punkt zaczepienia zmiany właściwości przed rewizją . Krótko mówiąc, celem pre-revprop-change
skryptu przechwytującego jest kontrolowanie zmian niewersjonowanych (rewizji) właściwości i wysyłanie powiadomień (np. Wysyłanie wiadomości e-mail w przypadku zmiany właściwości wersji).
Istnieją 2 typy właściwości w Subversion:
- wersjonowane właściwości (np.
svn:needs-lock
i svn:mime-type
), które można ustawić w plikach i katalogach,
- niewersjonowane (rewizja) właściwości (np.
svn:log
i svn:date
), które są ustawiane dla wersji repozytorium .
Wersjonowane właściwości mają historię i mogą być manipulowane przez zwykłych użytkowników, którzy mają dostęp do odczytu / zapisu w repozytorium. Z drugiej strony, niewersjonowane nieruchomości nie mają historii i służą głównie do celów konserwacyjnych. Na przykład, jeśli zatwierdzisz wersję, otrzyma ona natychmiast svn:date
czas UTC zatwierdzenia, svn:author
twoją nazwę użytkownika i svn:log
wiadomość dziennika zmian (jeśli ją podałeś).
Jak już wspomniałem, celem pre-revprop-change
skryptu przechwytującego jest kontrolowanie zmian właściwości wersji. Nie chcesz, aby każdy, kto ma dostęp do repozytorium, mógł modyfikować wszystkie właściwości wersji, więc zmiana właściwości wersji jest domyślnie zabroniona. Aby umożliwić użytkownikom zmianę właściwości, musisz utworzyć pre-revprop-change
punkt zaczepienia.
Najprostszym hak może zawierać tylko jedną linię: exit 0
. Pozwoli to każdemu uwierzytelnionemu użytkownikowi na zmianę dowolnej właściwości wersji i nie powinno być używane w rzeczywistym środowisku. W systemie Windows można użyć skryptu wsadowego lub skryptu opartego na programie PowerShell, aby zaimplementować pewną logikę w pre-revprop-change
podpięciu.
Ten skrypt programu PowerShell umożliwia svn:log
tylko zmianę właściwości i odrzuca puste komunikaty dziennika.
# 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
Ten skrypt wsadowy pozwala tylko użytkownikowi „svnmgr” na zmianę właściwości wersji:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0