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:
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.
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 ...
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.
Si tiene una combinación de usuarios de Unix y Windows que trabajan con el repositorio, 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.
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