O nome do script de gancho não é tão assustador se você conseguir decifrá-lo: é um gancho de alteração de propriedade antes da revisão . Em resumo, o objetivo do pre-revprop-change
script hook é controlar as alterações das propriedades não revisadas (de revisão) e enviar notificações (por exemplo, enviar um email quando a propriedade de revisão for alterada).
Existem 2 tipos de propriedades no Subversion:
- propriedades com versão (por exemplo,
svn:needs-lock
e svn:mime-type
) que podem ser definidas em arquivos e diretórios,
- propriedades não revisadas (revisão) (por exemplo,
svn:log
e svn:date
) que são definidas nas revisões do repositório .
As propriedades com versão têm histórico e podem ser manipuladas por usuários comuns que têm acesso de leitura / gravação a um repositório. Por outro lado, propriedades não versionadas não têm histórico e servem principalmente para fins de manutenção. Por exemplo, se você confirmar uma revisão, ela será svn:date
recebida imediatamente com a hora UTC de sua confirmação, svn:author
com seu nome de usuário e svn:log
com sua mensagem de log de confirmação (se você especificou alguma).
Como já especifiquei, o objetivo do pre-revprop-change
script hook é controlar as alterações nas propriedades da revisão. Você não deseja que todos os que têm acesso a um repositório possam modificar todas as propriedades de revisão, portanto, alterar as propriedades de revisão é proibido por padrão. Para permitir que os usuários alterem propriedades, é necessário criar um pre-revprop-change
gancho.
O gancho mais simples podem conter apenas uma linha: exit 0
. Isso permitirá que qualquer usuário autenticado altere qualquer propriedade de revisão e não deve ser usado em ambiente real. No Windows, você pode usar script em lote ou script baseado no PowerShell para implementar alguma lógica dentro do pre-revprop-change
gancho.
Esse script do PowerShell permite alterar svn:log
apenas a propriedade e nega mensagens de log vazias.
# 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
Esse script em lote permite que apenas o usuário "svnmgr" altere as propriedades da revisão:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0