repositorio - tortoise svn server
¿Qué es un gancho de cambio de preprogramación en SVN y cómo lo creo? (7)
Aquí está el enlace a la pregunta de desbordamiento de pila con muchos ganchos comunes. Tipos comunes de ganchos de subversión , incluida la fuente original del gancho de pre-revprop-change
para Windows publicado aquí.
Debe referirse allí ya que pueden mejorarse con el tiempo.
Quería editar un comentario de registro en el navegador del repositorio y recibí un mensaje de error que indica que no existe un enlace de cambio de preproducción para el repositorio. Además de tener un nombre aterrador, ¿qué es un gancho de cambio previo a la revolución, y cómo lo creo?
Básicamente, se trata de un script que se inicia antes de que se modifique la propiedad no versionada en el repositorio, para que pueda administrar con mayor precisión lo que está sucediendo en su repositorio.
Hay plantillas en el distrib de SVN para diferentes ganchos, ubicadas en el subdirectorio / hooks (* .tmpl que debe editar y renombrar según su sistema operativo, para activarlo).
El nombre de la secuencia de comandos de enlace no es tan aterrador si logra descifrarlo: es un cambio de propiedad previo a la revisión . En resumen, el propósito de pre-revprop-change
comandos de gancho pre-revprop-change
es controlar los cambios de las propiedades no versionadas (revisión) y enviar notificaciones (por ejemplo, para enviar un correo electrónico cuando se modifica la propiedad de revisión).
Hay 2 tipos de propiedades en Subversion:
- propiedades versionadas (por ejemplo,
svn:needs-lock
ysvn:mime-type
) que se pueden establecer en archivos y directorios, - propiedades no versionadas (revisión) (por ejemplo,
svn:log
ysvn: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 realiza una revisión, inmediatamente obtiene svn: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 ha especificado alguno).
Como ya lo especifiqué, el propósito de pre-revprop-change
comandos de gancho pre-revprop-change
es controlar los cambios de las propiedades de revisión. No desea que todos los que tengan acceso a un repositorio puedan modificar todas las propiedades de revisión, por lo que está prohibido cambiar las propiedades de revisión de manera predeterminada. Para permitir a los usuarios cambiar las propiedades, debe crear pre-revprop-change
.
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 se debe usar en un entorno real. En Windows, puede usar un script por lotes o un script basado en PowerShell para implementar alguna lógica dentro pre-revprop-change
.
Este script de PowerShell permite cambiar solo la propiedad svn:log
y deniega 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
Esta secuencia de comandos por lotes solo permite al usuario "svnmgr" cambiar 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
Gracias #patmortech
Y agregué su código que "solo el mismo usuario puede cambiar su código".
:: Only allow editing of the same user.
for /f "tokens=*" %%a in (
''"%VISUALSVN_SERVER%/bin/svnlook.exe" author -r %revision% %repository%'') do (
set orgAuthor=%%a
)
if /I not "%userName%" == "%orgAuthor%" goto ERROR_SAME_USER
Para Windows, aquí hay un enlace a un ejemplo de archivo por lotes que solo permite cambios en el mensaje de registro (no otras propiedades):
http://ayria.livejournal.com/33438.html
Básicamente copie el código siguiente en un archivo de texto y pre-revprop-change.bat
nombre pre-revprop-change.bat
y guárdelo en el subdirectorio /hooks
para su repositorio.
@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5
:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME
:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION
:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in (''find /V ""'') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY
goto :eof
:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT
:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT
:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT
:ERROR_EXIT
exit /b 1
Para que Linux permita la edición de un comentario de registro,
- localice el archivo
pre-revprop-change.tmpl
en el directoriohooks
de su repositorio - copie el archivo en el mismo directorio,
pre-revprop-change
apre-revprop-change
- dar permiso de ejecución al archivo (para el usuario del servidor, por ejemplo,
www-data
)
Editado: (gracias a lindes)
- después de eso, es posible que deba editar la secuencia de comandos para devolver un valor de salida de
0
para el tipo de ediciones que desea permitir.
Para usuarios de PC: La extensión .bat no funcionó para mí cuando se usaba en Windows Server Maching. Usé VisualSvn como sugirió Django Reinhardt, y creó un gancho con una extensión .cmd.