Too Cool for Internet Explorer

SVN Hook: asociar acciones a keywords de Trac

Hora y Fecha: Mayo 2, 2007 @ 11:20 pm Autor: Moisés Maciá
Categorías:
506 views

En Trac, a la hora de introducir un nuevo ticket, le podemos asignar keywords:

Trac Keywords

Este es un campo sin valor aparente mas que para taggear tickets hasta que el otro día se me ocurrió un hack curioso: utilizar los keywords asociados a un ticket para disparar acciones como por ejemplo notificaciones por email, reconstruir la documentación, etc.

Cómo funciona

Funciona de forma similar al anterior hook que comenté, el auto cierre de tickets: responde a mensajes del estilo “changed blah blah to do this or that, fixes #34″.

Si el mensaje contiene alguna orden de cierre sobre un ticket (las ordenes son personalizables a través del array $msgClose), se pasa a ver si el ticket tiene keywords (puede tener varias separadas por comas).

  1.  
  2. $msgClose = array (
  3.     ‘close’,
  4.     ‘closed’,
  5.     ‘closes’,
  6.     ‘fix’,
  7.     ‘fixed’,
  8.     ‘fixes’
  9.     );
  10.  

En este caso se ejecutan las acciones pertinentes.

Para añadir nuevas acciones hay que mapearlas en el array $keyword2action.

  1.  
  2. $keyword2action = array (
  3.     ‘publish’       => ‘emailThis’
  4. );
  5.  

En el ejemplo vemos que la keyword publish ejecuta la acción emailThis.

Por último los callbacks de las acciones tienen esta pinta:

  1.  
  2. function action_emailThis ($commit=, $description=, $url=, $ticket=0)
  3. {
  4.     $to = "mailing@domain.com";
  5.     $subject = "[My Awesome Project] Cheers!, we have closed ticket #$ticket";
  6.  
  7.     $msg = "Ticket description:\r\n";
  8.     $msg .= "—————————————————————————\r\n";
  9.     $msg .= $description . "\r\n";
  10.     $msg .= "—————————————————————————\r\n\r\n";
  11.     $msg .= "Commit message:\r\n";
  12.     $msg .= "—————————————————————————\r\n";
  13.     $msg .= $commit . "\r\n";
  14.     $msg .= "—————————————————————————\r\n\r\n";
  15.     $msg .= "More info in $url";
  16.  
  17.     mail ($to, $subject, $msg);
  18. }
  19.  

Donde $commit es el mensaje de cierre del ticket, $description es la descripción del ticket en Trac, $url es la URL al ticket completo y su historial en Trac y por último $ticket es el número de identificación del ticket.

Qué necesito

  1. Una máquina con Trac, Subversion y un servidor de correo correctamente configurados.
  2. ¡El script!

En el gancho post-commit de Subversion hay que colocar las siguientes variables (si no están ya):

  1.  
  2. REPOS="$1"
  3. REV="$2"
  4. LOG=`/usr/bin/svnlook log -r $REV $REPOS`
  5. TRAC_ENV=‘/somewhere/trac/project/’
  6.  
  7. /usr/bin/php -q trac-keyword2action.php –trac-path "$TRAC_ENV" \
  8.                –message "$LOG" \
  9.                –trac-url "http://trac.mydomain.com/"
  10.  

Problemas

  • Trac debe utilizar SQLite como backend, aunque es posible utilizar MySQL modificando un par de lineas del código.
  • PHP5 + PDO + SQLite, no suele estar instalado en servidores baratos.
  • Si se cierra un ticket sin pasar por Subversion no funciona.

Usos

Hay algunos cambios mayores en un proyecto que por alguna razón nos interesa comunicar a los cuatro vientos cuando finalmente son implementados, bien a una lista de correo, un canal RSS, un informe para el jefe, etc. Estos tickets especiales pueden marcarse para desencadenar la acción elegida.

También es útil cuando se reporta un typo en la documentación o en los archivos de cadenas para localizar/internacionalizar. Marcando estos tickets se puede regenerar de nuevo los archivos de documentación o compilar las traducciones tan pronto como el fallo este resuelto.

¿Alguna sugerencia más? ¿Para qué lo emplearíais?





« Anterior post: Ya es oficial: Dell venderá equipos con Ubuntu | Próximo post: By popular demand »

Los comentarios estan cerrados.


Bad Behavior has blocked 283 access attempts in the last 7 days.