tutorial tortoise subversion svn version-control scripting svn-hooks

svn - tortoise - Tipos comunes de ganchos de subversión



svn vs git (16)

El más común, creo, es permitir que las personas cambien los comentarios de revisión después de hacer una comedia.

Debe habilitar el script de enlace ''pre-revprop-change'' para permitir eso. El ejemplo proporcionado, si está habilitado, permite editar solo la propiedad del comentario y solo ser el comitter original. Ideal para corregir errores tipográficos.

¿Qué tipo de scripts de gancho usan las personas para Subversion? Solo las ideas generales pero el código también serían geniales.


En mi lugar de trabajo, hemos configurado un enganche post-commit que genera fuentes RSS que se muestran en varios tableros y se usan para que los revisores de códigos sepan cuándo es el momento de revisar y para que veamos que los nuevos empleados están cometiendo suficientes .


Esto fue discutido en la lista de correo de usuarios de subversión hace un tiempo. This publicación en particular tiene algunas ideas útiles.


Estoy utilizando ganchos post-commit ( creo que es este ) para publicar un mensaje en un foro en Basecamp para cada commit. Dos ventajas:

  1. Como desarrollador principal, recibo un rollup de commits todas las mañanas (a través de la fuente RSS de ese foro de basecamp) y puedo ver lo que mi equipo ha estado haciendo bastante rápido.

  2. Nuestra instalación de Trac / SVN está detrás de nuestro firewall, por lo que esto brinda a mis superiores en otros lugares una ventana a lo que estamos haciendo. Puede que no lo entiendan, pero para un gerente, mucha actividad parece, bueno, mucha actividad;)

Supongo que el resultado final de esto es similar a lo que está haciendo @Aviv.

Estoy buscando soluciones para construir el compromiso más reciente en un servidor separado para una integración continua, pero voy a tener que cambiar la forma en que hacemos los cambios en nuestro esquema de base de datos para que funcione.


Olvidé ingresar un comentario mientras me comprometía. No tuve tiempo de averiguar por qué mi gancho de cambio de preprogramación no funcionaba. Así que el siguiente comando svnadmin me svnadmin setlog <filesystem path to my repository> --bypass-hooks -r 117 junk a ingresar un mensaje de confirmación: svnadmin setlog <filesystem path to my repository> --bypass-hooks -r 117 junk , donde "basura" es el archivo que contiene el texto que quería que fuera el comentario . svn setlog help tiene más información de uso ...




Tengo una configuración usando la biblioteca Ruby Tinder que envío a la sala de fogatas, si alguien quiere el guión, puedo publicarlo o enviarle el código.

Otros más comunes que he visto son publicaciones en sistemas de seguimiento de errores y notificaciones por correo electrónico.


Un gancho para notificar al sistema de gestión de errores / problemas de los cambios en el repositorio. Es decir. el mensaje de confirmación tiene un problema: 546 o una etiqueta similar que se analiza y se envía al sistema de gestión de errores.


Usamos FogBugz para el seguimiento de errores, proporciona scripts de confirmación de subversión que le permiten incluir un número de caso en su cheque en los comentarios y luego asocia el error con el control que lo arregló. Requiere que se configure una instancia de WebSVN para que tenga un visor basado en web para su repositorio.


Usamos una secuencia de comandos commit hook para activar nuestro robot de lanzamiento. Escribir nueva información de lanzamiento en un archivo llamado changes.txt en nuestros diferentes productos activará la creación de una etiqueta y los artefactos relevantes.


Verificamos lo siguiente con nuestros scripts de gancho:

  • Que se ha proporcionado un mensaje de registro de compromiso
  • Que un revisor ha sido especificado para el commit
  • Que ningún código generado automáticamente o tipos de archivos prohibidos terminan en el repositorio
  • Enviar un correo electrónico cuando se crea una rama / etiqueta

Todavía queremos implementar lo siguiente:

  • Enviar un correo electrónico cuando un usuario adquiera un bloqueo en un archivo
  • Envía un correo electrónico cuando tu bloqueo ha sido robado
  • Enviar un correo electrónico a todos cuando se haya cambiado una propiedad de revisión

Windows pre-commit hook para verificar que el registro contenga algo.

@ECHO OFF setlocal ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Get subversion arguments set repos=%~1 set txn=%2 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Set some variables set svnlookparam="%repos%" -t %txn% :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Make sure that the new svn:log message contains some text. set bIsEmpty=true for /f "tokens=* usebackq" %%g in (`svnlook log %svnlookparam%`) do ( set bIsEmpty=false ) if ''%bIsEmpty%''==''true'' goto ERROR_EMPTY echo Allowed. >&2 goto :END :ERROR_EMPTY echo Empty log messages are not allowed. >&2 goto ERROR_EXIT :ERROR_EXIT :: You may require to remove the /b below if your hook is called directly by subversion exit /b 1 :END endlocal


gancho post-commit para enviar notificaciones por correo electrónico de que algo cambió en el repositorio a una lista de correos electrónicos. Necesita sendmail.exe en la misma carpeta que su archivo hook, junto con sendmail.ini.

También necesita un archivo post-commit.tos.txt junto a su post-commit.cmd para listar los destinatarios del correo. El archivo debe contener:

[email protected],[email protected],[email protected]

Aquí está el código de gancho:

@ECHO OFF setlocal ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Get subversion arguments set repos=%~1 set rev=%2 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Set some variables set tos=%repos%/hooks/%~n0.tos.txt set reposname=%~nx1 set svnlookparam="%repos%" --revision %rev% if not exist "%tos%" goto :END ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Prepare sendmail email file set author= for /f "tokens=* usebackq" %%g in (`svnlook author %svnlookparam%`) do ( set author=%%g ) for /f "tokens=* usebackq delims=" %%g in ("%tos%") do ( set EmailNotificationTo=%%g ) set SendMailFile=%~n0_%reposname%_%rev%.sm echo To: %EmailNotificationTo% >> "%SendMailFile%" echo From: %reposname%[email protected] >> "%SendMailFile%" echo Subject: [%reposname%] Revision %rev% - Subversion Commit Notification >> "%SendMailFile%" echo --- log [%author%] --- >> "%SendMailFile%" svnlook log %svnlookparam% >> "%SendMailFile%" 2>&1 echo --- changed --- >> "%SendMailFile%" svnlook changed %svnlookparam% --copy-info >> "%SendMailFile%" 2>&1 echo .>> "%SendMailFile%" ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Send email type "%SendMailFile%" | "%~dp0sendmail.exe" -t ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Clean-up if exist "%SendMailFile%" del "%SendMailFile%" :END endlocal


varias cosas que los utilizamos para:

  • Integración con el rastreador de errores ( Trac en nuestro caso : un mensaje de confirmación que dice ''Cierra # 514'' marca automáticamente ese error como cerrado
  • Integración con la integración de compilación ( buildbot en nuestro caso : un compromiso con una rama vigilada desencadena una compilación
  • pre-commit hook para validar el commit - usamos svnchecker . Valida nuestro código de Python para corregir PEP8
  • enviando correos de registro a una lista de correo
  • ejecutar secuencias de comandos de sangría

Estoy usando el gancho pre-revprop-change que permite retroceder y editar comentarios y tal información una vez que se ha realizado la confirmación. Esto es muy útil si falta información / falla en los comentarios de confirmación.

Aquí pre-revprop-change.bat un archivo por lotes pre-revprop-change.bat para Windows NT o posterior ... Sin duda puede mejorarlo con más modificaciones. También puede derivar un post-revprop-change.cmd de él para hacer una copia de seguridad del antiguo snv:log algún lugar o simplemente para agregarlo al nuevo registro ...

La única parte difícil fue poder analizar realmente el stdin del archivo por lotes ... Esto se hace aquí con el comando FIND.EXE .

La otra es que he recibido informes de otros usuarios sobre problemas con el uso de /b con el comando de exit . Puede que necesite eliminar esa /b en su aplicación específica si los casos de error no se comportan bien.

@ECHO OFF set repos=%1 set rev=%2 set user=%3 set propname=%4 set action=%5 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Only allow changes to svn:log. The author, date and other revision :: properties cannot be changed :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if /I not ''%propname%''==''svn:log'' goto ERROR_PROPNAME :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Only allow modifications to svn:log (no addition/overwrite or deletion) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if /I not ''%action%''==''M'' goto ERROR_ACTION :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: Make sure that the new svn:log message contains some text. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 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 properties are not allowed. >&2 goto ERROR_EXIT :ERROR_PROPNAME echo Only changes to svn:log revision properties 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