Tipos comunes de ganchos de subversión

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

    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 

    Si tiene una combinación de usuarios de Unix y Windows que trabajan con el repository, le insto a utilizar case -insensitive.py pre-commit hook-script como medida de precaución. Evita situaciones difíciles de resolver donde las actualizaciones de svn fallan para los usuarios de Windows debido a un cambio de nombre de archivo que solo cambió el caso del nombre del archivo . Créame, hay una buena posibilidad de que le ahorrará problemas.

    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 repository.

    En mi lugar de trabajo, hemos configurado un enganche post-commit que genera fonts 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 .

    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 comstackción ( buildbot en nuestro caso : un compromiso con una twig vigilada desencadena una comstackció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

    Para aquellos que buscan un pre-revprop-change.bat para una operación snvsync :

    https://gist.github.com/1679659

     @ECHO OFF set user=%3 if /I '%user%'=='syncuser' goto ERROR_REV exit 0 :ERROR_REV echo "Only the syncuser user may change revision properties" >&2 exit 1 

    Simplemente viene de aquí: http://chestofbooks.com/computers/revision-control/subversion-svn/Repository-Replication-Reposadmin-Maint-Replication.html y se ha adaptado para Windows.

    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.

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

    gancho post-commit para enviar notificaciones por correo electrónico de que algo cambió en el repository 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:

     user1@example.com,user2@example.com,user3@example.com 

    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%.svn.technologie@gsmprjct.com >> "%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 

    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.

    Un gancho para notificar al sistema de gestión de errores / problemas de los cambios en el repository. 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.

    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 repository
    • Enviar un correo electrónico cuando se crea una twig / etiqueta

    Todavía queremos implementar lo siguiente:

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

    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.

    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.

    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 

    Olvidé ingresar un comentario mientras me comprometía. No tuve tiempo de averiguar por qué mi gancho de cambio de preprogtwigción no funcionaba. Así que el siguiente comando svnadmin me svnadmin setlog --bypass-hooks -r 117 junk a ingresar un mensaje de confirmación: svnadmin setlog --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 …