tortoise repositorio que password informatica desvincular create crear carpeta svn svn-hooks

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 y svn:mime-type ) que se pueden establecer en archivos y directorios,
  • propiedades no versionadas (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 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 directorio hooks de su repositorio
  • copie el archivo en el mismo directorio, pre-revprop-change 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 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.