Il nome dello script hook non è così spaventoso se riesci a decifrarlo: è hook di modifica della proprietà pre-revisione . In breve, lo scopo di pre-revprop-change
hook script è controllare le modifiche delle proprietà non riviste (revisione) e inviare notifiche (ad es. Per inviare un'e-mail quando si modifica la proprietà revisione).
Esistono 2 tipi di proprietà in Subversion:
- proprietà con versione (ad es.
svn:needs-lock
e svn:mime-type
) che possono essere impostate su file e directory,
- proprietà non revisionate (revisione) (ad es.
svn:log
e svn:date
) impostate su revisioni del repository .
Le proprietà con versione hanno una cronologia e possono essere manipolate da utenti ordinari che hanno accesso in lettura / scrittura a un repository. D'altra parte, le proprietà non controllate non hanno alcuna storia e servono principalmente per scopi di manutenzione. Ad esempio, se si commette una revisione, questa ottiene immediatamente svn:date
con l'ora UTC del commit, svn:author
con il proprio nome utente e svn:log
con il messaggio di registro del commit (se specificato).
Come ho già specificato, lo scopo di pre-revprop-change
hook script è controllare le modifiche alle proprietà di revisione. Non si desidera che tutti coloro che hanno accesso a un repository siano in grado di modificare tutte le proprietà di revisione, quindi la modifica delle proprietà di revisione è vietata per impostazione predefinita. Per consentire agli utenti di modificare le proprietà, è necessario creare un pre-revprop-change
hook.
Il gancio più semplice può contenere una sola riga: exit 0
. Consentirà a qualsiasi utente autenticato di modificare qualsiasi proprietà di revisione e non dovrebbe essere utilizzato in un ambiente reale. Su Windows, è possibile utilizzare script batch o script basati su PowerShell per implementare una logica all'interno del pre-revprop-change
hook.
Questo script di PowerShell consente di modificare svn:log
solo la proprietà e nega i messaggi di registro vuoti.
# 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
Questo script batch consente solo all'utente "svnmgr" di modificare le proprietà della revisione:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0