¿Qué es un gancho previo al cambio de revprop en SVN y cómo lo creo?


169

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 previo al cambio de revprop para el repositorio. Además de tener un nombre aterrador, ¿qué es un gancho previo al cambio de revprop y cómo lo creo?


16
ahora este enlace es el segundo, justo después de un enlace a esta pregunta :)
ULysses

El enlace sobre conduce a SVNBook 1.0 MUY desactualizado. El actual es 1.7 y 1.8 (todas las noches): svnbook.red-bean.com/en/1.8
bahrep

Respuestas:


52

Básicamente es un script que se inicia antes de que la propiedad no versionada se modifique en el repositorio, para que pueda administrar con mayor precisión lo que sucede en su repositorio.

Hay plantillas en la distribución SVN para diferentes enlaces, ubicados en el subdirectorio / hooks (* .tmpl que debe editar y renombrar dependiendo de su sistema operativo, para activar).


2
Todas las instrucciones están en el script de la plantilla de gancho. Si necesita el gancho para un svnsyncespejo, entonces la secuencia de comandos predeterminada deberá cambiarse, ya que solo permite cambios en svn: log. Svnsync cambia más que esto, así que simplemente puse un exit 0allí para permitir todos los cambios de propiedad (ya que esto es solo un espejo para mí).
Matt Connolly

... luego guárdelo pre-revprop-changeen el mismo directorio y hágalo ejecutable para el usuario del servidor web (en Linux).
Mateng

209

Para Windows, aquí hay un enlace a un archivo por lotes de ejemplo que solo permite cambios en el mensaje de registro (no otras propiedades):

http://ayria.livejournal.com/33438.html

Básicamente, copie el siguiente código en un archivo de texto y asígnele un nombre pre-revprop-change.baty guárdelo en el \hookssubdirectorio 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

37
Podría haber vinculado a la versión allí stackoverflow.com/questions/6155/… . Escribí ese gancho y lo publiqué en el foro SVN hace un tiempo. Supongo que debería haber puesto algunos créditos en los comentarios del gancho.
Philibert Perusse

1
Estoy usando este script con VisualSVN 2.0.8 y TortoiseSVN 1.6.11 y funciona muy bien.
Mark Biek

27
Puede editar ganchos en VisualSVN haciendo clic con el botón derecho en el nombre del repositorio en VisualSVN Server y seleccionando "Propiedades ...". Verás una pestaña "Ganchos". Allí verá los diferentes tipos de ganchos disponibles. Seleccione el correcto, haga clic en "Editar" y pegue el código anterior en él. Espero que ayude a los usuarios de VisualSVN!
Chuck Le Butt

Me funcionó deshabilitar la línea: si / no "% action%" == "M" ir a ERROR_ACTION. De otra manera, seguía diciendo que solo se permitían modificaciones.
Nathan

66
El método rápido y sucio para Windows es crear un archivo vacío llamado hooks \ pre-revprop-change.bat
Ben Claar

18

Para que Linux permita la edición de un comentario de registro,

  • ubique el archivo pre-revprop-change.tmplen el hooksdirectorio de su repositorio
  • copie el archivo en el mismo directorio, renombrándolo a pre-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 el script para devolver un valor de salida 0para el tipo de ediciones que desea permitir.

Esto es insuficiente ... todavía hay que cambiar los valores de salida de manera adecuada. Pero me pareció útil de todos modos, como un puntero al lugar correcto para buscar ... que algunas de las otras respuestas faltaban, o dar respuestas específicas de Windows. Así que gracias por esto.
lindes

1
Estoy bastante seguro, en mi versión de Ubuntu Linux, copiar y dar permiso fue suficiente. Pero ya no estoy seguro. He editado la respuesta en consecuencia. Gracias.
Alois Heimer

Bueno, estoy seguro de que no funcionó para mí tal como está cuando lo probé hace 2 días y agregué este comentario. Sin embargo, con la edición, esta respuesta funciona para mí.
lindes

11

Aquí está el enlace a la pregunta de desbordamiento de la pila con muchos enlaces comunes Tipos comunes de enlaces de subversión , incluida la fuente original del enlace pre-revprop-changepara Windows con publicación cruzada aquí.

Debe consultar allí ya que pueden mejorar con el tiempo.


7

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

4

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-lockysvn:mime-type ) que se pueden configurar en archivos y directorios,
  • propiedades no revisadas (revisión) (por ejemplo, svn:logy 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:authorcon su nombre de usuario y svn:logcon su mensaje de registro de confirmación (si especificó alguno).

Como ya especifiqué, el propósito del pre-revprop-changescript 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-changeenlace.

Este script de PowerShell permite cambiar svn:logsolo 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

2

Para usuarios de PC: la extensión .bat no funcionó para mí cuando se usaba en el mecanizado de Windows Server. Usé VisualSvn como Django Reinhardt sugirió, y creó un gancho con una extensión .cmd.


0
  1. Vaya al directorio de repositorio SVN en la subcarpeta "ganchos", por ejemplo, "D: \ SVN \ hooks \"
  2. cree el archivo vacío "pre-revprop-change.bat" allí
  3. en el archivo escriba "exit 0" (sin "") y guárdelo
  4. disfruta :)

(Esta solución seguramente tiene inconvenientes, ya que nada está marcado / prohibido. Pero para mi caso, un repositorio local que solo estoy usando, parece funcionar).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.