El nombre del script de enlace no da tanto miedo si logra descifrarlo: es el enlace de cambio de propiedad previo a la revisión . En resumen, el propósito depre-revprop-change
secuencia comandos enlace es controlar los cambios de las propiedades no versionadas (revisión) y enviar notificaciones (por ejemplo, enviar un correo electrónico cuando se cambia la propiedad de revisión).
Hay 2 tipos de propiedades en Subversion:
- propiedades versionadas (p. ej.
svn:needs-lock
ysvn:mime-type
) que se pueden configurar en archivos y directorios,
- propiedades no revisadas (revisión) (por ejemplo,
svn:log
y svn:date
) que se establecen en las revisiones del repositorio .
Las propiedades versionadas tienen historial y pueden ser manipuladas por usuarios comunes que tienen acceso de lectura / escritura a un repositorio. Por otro lado, las propiedades no versionadas no tienen ningún historial y sirven principalmente para fines de mantenimiento. Por ejemplo, si confirma una revisión, inmediatamente obtienesvn:date
con la hora UTC de su confirmación, svn:author
con su nombre de usuario y svn:log
con su mensaje de registro de confirmación (si especificó alguno).
Como ya especifiqué, el propósito del pre-revprop-change
script de enlace es controlar los cambios de las propiedades de revisión. No desea que todos los que tienen acceso a un repositorio puedan modificar todas las propiedades de revisión, por lo que está prohibido cambiar las propiedades de revisión de forma predeterminada. Para permitir que los usuarios cambien propiedades, debe crearpre-revprop-change
enlace.
El gancho más simple puede contener solo una línea: exit 0
. Permitirá que cualquier usuario autenticado cambie cualquier propiedad de revisión y no debe usarse en un entorno real. En Windows, puede usar un script por lotes o un script basado en PowerShell para implementar algo de lógica dentro del pre-revprop-change
enlace.
Este script de PowerShell permite cambiar svn:log
solo propiedades y niega los mensajes de registro vacíos.
# 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
Este script por lotes permite que solo el usuario "svnmgr" cambie las propiedades de revisión:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0