Notificaciones por correo desde Subversion

El escenario es el siguiente. Varios desarrolladores, con una carga importante de trabajo, y alguien que tiene que intentar controlar el código que se commitea al repositorio.

Sumémosle a ese alguien, la tarea de desarrollar y tener sus propias actividades.

Bajo ese escenario, se hace casi imposible llevar un control de las modificaciones que se realizan al código.

Para quienes nos identificamos con ese alguien, y que, además, usamos Subversion, existe una funcionalidad que podemos explotar desde el repositorio, para evitar perderle los pasos a la situación.

Vamos a configurar un poquito el repositorio para que, luego de cada commit, nos envíe un correo informándonos de lo sucedido.

Para eso, empezemos por ingresar a la carpeta hooks del repositorio.

cd /path/a/mi/repositorio/hooks

Si miramos el contenido del directorio vamos a encontrarnos con una serie de archivos, de extensión tmpl, que funcionan como plantillas para los distintos eventos que vamos a poder manejar.

Estos son los archivos que vamos a encontrar:

post-commit.tmpl
post-lock.tmpl
post-revprop-change.tmpl
post-unlock.tmpl
pre-commit.tmpl
pre-lock.tmpl
pre-revprop-change.tmpl
pre-unlock.tmpl
start-commit.tmpl

El archivo que nos va a interesar, es post-commit.tmpl. Para ponerlo en funcionamiento, vamos a crear una copia y le damos permiso de ejecución.

cp post-commit.tmpl post-commit
chmod +x post-commit

Veamos entonces qué contiene ese archivo (en ésta parte es como los viejos libros de «Elije tu propia aventura», cada uno con su editor, yo voy a ir por VI).

vi post-commit

Al abrirlo, vamos a ver:

#!/bin/sh
...
Un montón de comentarios que no estaría mal leer
...
 
REPOS="$1"
REV="$2"
/usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" commit-watchers@example.org

Lo que hace éste archivo, es recibir dos parámetros. El primero es la ubicación física del repositorio y el segundo el número de revisión.

Esos parámetros son enviados a un segundo archivo, commit-email.pl, que además, como tercer parámetro, toma la dirección de correo del destinatario.

Un pequeño detalle sobre la línea final, es que puede que sólo aparezca el archivo commit-email.pl sin el path absoluto. Es más, podríamos no tener el archivo.

Si necestiamos obtenerlo, podemos descargarlo dese la página de herramientas de Subversion.

En mi caso, el archivo está en el lugar indicado, así que simplemente lo voy a copiar dentro de la carpeta hooks del repositorio.

cp /usr/share/subversion/hook-scripts/commit-email.pl /path/a/mi/repositorio/hooks

De la misma forma que hicimos con el archivo post-commit, le vamos a dar permiso de ejecución a commit-email.pl.

chmod +x commit-email.pl

Hecho esto, vamos a darle el toque final al script post-commit. La versión para el ejemplo quedaría de la siguiente forma.

#!/bin/sh
 
REPOS="$1"
REV="$2"
 
commit-email.pl "$REPOS" "$REV" usuario@dominio.com.ar

Grabamos y hacemos la primera prueba, ejecutando nuestro primer commit desde el cambio.

Van a recibir un correo con el número de revisión en el asunto y los archivos modificados (no todos si la lista es muy grande).

En el cuerpo del mensaje, van a tener toda la información detallada del commit, incluyendo los bloques de código que se cambiaron.

Ahora si, a commitear en paz.