Pregunta

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?

¿Fue útil?

Solución

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 de SVN para diferentes enlaces, ubicados en el subdirectorio / hooks (* .tmpl que tiene que editar y renombrar según su sistema operativo para activar).

Otros consejos

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 código siguiente en un archivo de texto y asígnele el 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,

  • busque el archivo pre-revprop-change.tmpl en el directorio hooks de su repositorio
  • copie el archivo en el mismo directorio y renómbrelo a pre-revprop-change
  • concede 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 de 0 para el tipo de ediciones que desea permitir.

Aquí está el enlace a la pregunta de desbordamiento de pila con muchos enlaces comunes Tipos comunes de enlaces de Subversion , incluida la fuente original del enlace pre-revprop-change para Windows publicado aquí de forma cruzada.

Debería consultar allí, ya que pueden mejorar con el tiempo.

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

El nombre del script de enlace no da tanto miedo si logra descifrarlo: es enlace de cambio de propiedad previo a la revisión . En resumen, el propósito de El script de enganche pre-revprop-change es para controlar los cambios de las propiedades no revisadas (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 (por ejemplo, svn: needs-lock y svn: mime-type ) que se pueden configurar en archivos y directorios,
  • propiedades no versionadas (revisión) (p. ej., svn: log y svn: date ) que se establecen en el depósito revisiones .

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 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 especificó alguno).

Como ya especifiqué, el propósito del script de enlace 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 forma predeterminada. Para permitir que los usuarios cambien las propiedades, debe crear el enlace pre-revprop-change .

El gancho más simple puede contener una sola 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 cierta lógica dentro del enlace pre-revprop-change .

Este script de PowerShell permite cambiar solo la propiedad svn: log 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 {

El nombre del script de enlace no da tanto miedo si logra descifrarlo: es enlace de cambio de propiedad previo a la revisión . En resumen, el propósito de El script de enganche pre-revprop-change es para controlar los cambios de las propiedades no revisadas (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 (por ejemplo, svn: needs-lock y svn: mime-type ) que se pueden configurar en archivos y directorios,
  • propiedades no versionadas (revisión) (p. ej., svn: log y svn: date ) que se establecen en el depósito revisiones .

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 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 especificó alguno).

Como ya especifiqué, el propósito del script de enlace 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 forma predeterminada. Para permitir que los usuarios cambien las propiedades, debe crear el enlace pre-revprop-change .

El gancho más simple puede contener una sola 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 cierta lógica dentro del enlace pre-revprop-change .

Este script de PowerShell permite cambiar solo la propiedad svn: log y niega los mensajes de registro vacíos.

IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )

exit 1
goto :eof

:label1
exit 0

Este script por lotes solo permite " svnmgr " usuario para cambiar las propiedades de revisión:

<*>.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 solo permite " svnmgr " usuario para cambiar las propiedades de revisión:

<*>

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top