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-changescript 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-locket 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:loget 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:dateheure UTC de votre validation, svn:authorvotre nom d'utilisateur et svn:logvotre 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-changescript 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-changehook.
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-changehook.
Ce script PowerShell permet svn:loguniquement 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