Integrar Subversion y Mantis
Partiendo de una instalación correcta de Subversion y de Mantis, este post te permitirá enlazar ambos, para que al hacer un commit en SVN este resuelva automáticamente una incidencia del Mantis.
Es decir, si una vez abierta una incidencia en Mantis, hacemos un commit en Subversion del estilo a:
En Mantis conseguiremos resolver la incidencia:
Y si vamos hacia abajo veremos que se ha agregado la siguiente nota:
El post está dividido en dos partes: primero haremos las modificaciones necesarias en el Mantis, y luego haremos lo propio en el Subversion.
Modificaciones en Mantis
Lo primero es crear un usuario llamado svn en el Mantis para que Subversion lo use al hacer commits, dándole capacidades de administrador, de este modo nos ahorraremos darle de alta en cada proyecto.
Ahora editamos el fichero de configuración de Mantis (config_inc.php en la raíz de la instalación del Mantis), añadiendo las siguientes opciones:
$g_source_control_account = 'svn';
$g_source_control_regexp = '/\b(?:bug|issue|incidencia|fallo|error|problema)\s*[#]{0,1}(\d+)\b/i';
$g_source_control_fixed_regexp = '/\b(?:fixed|fixes|arreglado|arreglada|corregido|corregida)\s+(?:bug|issue|incidencia|fallo|error|problema)?\s*[#]{0,1}(\d+)\b/i';
$g_source_control_set_status_to = RESOLVED;
$g_source_control_set_resolution_to = FIXED;
El significado de los campos es el siguiente:
g_source_control_account: Usuario de Mantis que creamos anteriormente.
g_source_control_regexp: Expresión regular para parsear los comentarios de Subversión y detectar que queremos añadir una nota a una incidencia.
g_source_control_fixed_regexp: Expresión regular para parsear los comentarios de Subversión y detectar que queremos resolver una incidencia.
g_source_control_set_status_to: Estado al que pasarán las incidencias asociadas a un commit (puedes ponerlo a CLOSED si lo prefieres).
g_source_control_set_resolution_to: Estado de resolución al que pasarán las incidencias asociadas a un commit.
Modificaciones en Subversion
Necesitaremos crear (o modificar) el gancho de Subversion hooks/post-commit para que cada vez que se produzca un cambio se avise al Mantis de ello:
#!/bin/bash
REPOS="$1"
REV="$2"
auth=$(svnlook author -r $REV $REPOS)
dt=$(svnlook date -r $REV $REPOS)
changed=$(svnlook changed -r $REV $REPOS)
log=$(svnlook log -r $REV $REPOS)
n=$'\n'
textLog=$'<b>Log del cambio:</b>'
textChanged=$'<b>Ficheros afectados:</b>'
/usr/bin/php -q /home/www-data/mantis/core/checkin.php <<< "Cambio [<b>${REV}</b>] por <b>$auth</b>, $dt$n$n$textLog$n$log$n$n$textChanged$n$changed"
En la línea final se hace la llamada al script de Mantis (cambia la ruta /home/www-data/mantis/core/checkin.php a la ruta de instalación de tu Mantis) que recogerá los valores del commit de Subversion. Puedes cambiar dicha línea para que se acople a tus necesidades. Como ejemplo, verás algo similar a esto en tu Mantis:
Cambio [313] por emilio, 2008-02-26 12:20:01 +0100 (Tue, 26 Feb 2008)
Log del cambio:
Corregida incidencia 0000001
esto
es un comentario
multilinea
Ficheros afectados:
U Software/borrar.txt
Damos permisos al fichero (hay que asegurarse que el usuario con que se ejecuta Subversion sea propietario también, en mi instalación el usuario es el servidor web: www-data, normalmente la carpeta donde se aloja el fichero ya tendrá los permisos apropiados, sólo asegúrate de no crear dicho fichero con la cuenta root sin cambiar luego el propietario):
chmod 744 /home/svn/hooks/post-commit
chown www-data:www-data /home/svn/hooks/post-commit
Prueba
Ahora sólo te queda probarlo, para ello sólo tienes que crear una incidencia de prueba en Mantis, y luego hacer un commit de prueba en el Subersion, si en Mantis se te actualiza el estado de la incidencia con la información del comentario en Subversion, es que todo ha ido bien.
Si tienes algún problema, por favor, revisa todos los pasos dados, que seguro que te has saltado algo, sino es así, pregunta.
[...] entre Java y C++. Tenemos integración contínua y la económica. Tenemos la integración entre Subversion y Mantis. Tenemos integración de paneles solares en ventanas, de muebles viejos en decoración moderna, e [...]
Hola,
Tengo una duda sencilla sobre la integración de SVN y Mantis.
En SVN tengo varios repositorios, uno para cada proyecto: Proyecto1, Proyecto2, …
En Mantis tengo creados tb varios proeyctos, igual que en SVN.
¿Como realizo la asociación de proyectos entre SVN y Mantis?
Las incidencias de Proyecto1 de Mantis únicamente pueden referirse al repositorio del Proyecto1 de SVN
Gracias de antemano.
Manuel
Hola Manuel,
En el script de SVN podrías actualizar varios proyectos a la vez de Mantis, sólo es cuestión de repetir el código del script varias veces.