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:

subversionmantis01.png

En Mantis conseguiremos resolver la incidencia:

subversionmantis02.png

Y si vamos hacia abajo veremos que se ha agregado la siguiente nota:

subversionmantis03.png

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.

11 comentarios

  1. Buen Post. Muy util. Para que me funcionara para cada repositorio tuve que copiar el post-commit en cada carpeta hooks (no se si existe otra forma) . Tambien los comentarios me quedaban privados, para hacerlos publico agregue $g_source_control_notes_view_status = VS_PUBLIC; al archivo config_inc.php.

    Gracias.

  2. Samuel dice: Responder

    Hola buen dia,

    Tengo una puequeña duda, ocupo realizar unos cambios en Mantis y SVN, que cuando el status del CR sea Fixed o Closed, el commit
    no sea permitido. Alguien podria ayudarme?

    Gracias!!

    1. Esa pregunta es sobre Mantis, no sobre la integración de Mantis y Subversion, si quieres que te respondan, plantea la pregunta en el foro adecuado, que supongo que será en la web de Mantis, no aquí. Lo siento.

      1. M@rce dice: Responder

        Emilio, gracias.
        Aunque esperé tres meses y medio para una respuesta irrelevante y carente de aporte; el día 2009/03/19 a las 17:42 respondes algo relacionado al Mantis y a mí me dices que planteo la consulta en el lugar inadecuado?

        Pensé que estabas publicando este tip por que sabías del funcionamiento de ambas herramientas y no solamente una mera publicación, por que integrar implica construir un todo a partir de las partes, aunar, saber lo que cada uno necesita del otro y donde se reflejará la resolución de esa necesidad, fusionar conceptos en uno que los sintetice.

  3. M@rce dice: Responder

    Hola,
    Tengo las siguientes dudas al respecto del tema:

    1) Como “sabe” o identifica el Mantis a que incidencia está haciendo referencia las modificaciones en el Svn?
    2) Si tengo varios proyectos en el Mantis, pero solo con algunos quiero la integración, como configuro el Svn?
    3) Los archivos afectados en el Svn, no son subidos al Mantis, o si?

    Aguardo respuesta y desde ya muchas gracias.

    Marcelo.

  4. Maritza dice: Responder

    Hola, me gustaría saber si para la integración de SVN y Mantis es necesario que las dos aplicaciones estén en el mismo servidor, o qué debo hacer para integrarlas en el caso de que SVN se encuentra en un servidor y Mantis en otro.

    Saludos y gracias.

    1. Si es posible, pero tienes que poder conectarte de manera automática, es decir vía script, desde la máquina con SVN hacia la máquina con Mantis, échale un ojo a la siguiente entrada para poner esto en marcha: SSH sin password.

  5. veronica dice: Responder

    Hola no se que he hecho mal pero no me funciona la integracion… necesito ayuda, muchisimas gracias.

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

  7. Manuel dice: Responder

    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

  8. […] 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 […]

Deja un comentario