Le nom du script hook n'est pas si effrayant si vous parvenez à le déchiffrer: c'est un hook de changement de propriété avant révision . En bref, le but du pre-revprop-change
script hook est de contrôler les modifications des propriétés non versionnées (révision) et d'envoyer des notifications (par exemple pour envoyer un e-mail lorsque la propriété de révision est modifiée).
Il existe 2 types de propriétés dans Subversion:
- propriétés versionnées (par exemple
svn:needs-lock
et svn:mime-type
) qui peuvent être définies sur des fichiers et des répertoires,
- propriétés non versionnées (révision) (par exemple
svn:log
et svn:date
) définies sur les révisions du référentiel .
Les propriétés versionnées ont un historique et peuvent être manipulées par des utilisateurs ordinaires disposant d'un accès en lecture / écriture à un référentiel. D'autre part, les propriétés non versionnées n'ont pas d'historique et servent principalement à des fins de maintenance. Par exemple, si vous validez une révision, elle obtient immédiatement l' svn:date
heure UTC de votre validation, svn:author
votre nom d'utilisateur et svn:log
votre message de journal de validation (si vous en avez spécifié un).
Comme je l'ai déjà spécifié, le but du pre-revprop-change
script hook est de contrôler les modifications des propriétés de révision. Vous ne voulez pas que toutes les personnes ayant accès à un référentiel puissent modifier toutes les propriétés de révision, donc la modification des propriétés de révision est interdite par défaut. Pour permettre aux utilisateurs de modifier les propriétés, vous devez créer un pre-revprop-change
hook.
Le crochet simple peut contenir une seule ligne: exit 0
. Il permettra à tout utilisateur authentifié de modifier toute propriété de révision et il ne doit pas être utilisé dans un environnement réel. Sous Windows, vous pouvez utiliser un script de commandes ou un script basé sur PowerShell pour implémenter une logique dans le pre-revprop-change
hook.
Ce script PowerShell permet svn:log
uniquement de modifier la propriété et refuse les messages de journal vides.
# 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
Ce script batch permet uniquement à l'utilisateur "svnmgr" de modifier les propriétés de révision:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0