RSS
 

SVN mit Mantis Bugtracker verknüpfen

07 Sep

Lange hab ich es vor mir hergeschoben aber heute hab ich mich dazu entschlossen das Thema endlich anzugehen. Ziel ist es beim committen ins SVN den dort hinterlegten Kommentar auch gleich ins Mantis zu übertragen. Als Fleißarbeit habe ich mir auferlegt einzelne Tasks per SVN Kommentar auch gleich auf “erledigt” setzen zu können.
Kernstück zur Lösung des Problems sind die Hooks von SVN. In diesem Fall interessiert uns nur die post-commit Hook. Diese liegt im jeweiligen Repository-Pfad im Ordner “hooks”. Im Template (post-commit.tpl) welches in der Standardinstallation angelegt wird ist bereits eine Zeile hinterlegt welche einfach auskommentiert oder gelöscht wird.
Drin stehen soll danach folgendes:

#!/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'
/usr/bin/php -q /var/bugtracker/core/checkin.php <<< "Changeset [${REV}] by $auth, $dt$n$log$n$changed"

Abspeichern und die Datei umbenennen in “post-commit” und fertig ist die Hook.

Als nächstes konfigurieren wir Mantis selbst. Gott sei Dank bringt der Bugtracker selbst schon entsprechende Möglichkeiten mit um von extern Befehle zu empfangen. Das muss dann nur noch konfiguriert werden. Dazu öffnen wir die Datei “config_inc.php“. Hier gehen wir ans Ende der Datei und tragen vor der Zeile “?>” folgendes ein:

$g_source_control_account = 'svn';
$g_source_control_regexp = '/\b(?:bug|issue)\s*[#]{0,1}(\d+)\b/i';
$g_source_control_set_status_to = RESOLVED;
$g_source_control_set_resolution_to = FIXED;
$g_source_control_fixed_regexp = '/\bfix(?:ed|es)\s+(?:bug|issue)?\s*[#]{0,1}(\d+)\b/i';

Anschließend legen wir im Mantis noch einen User namens “svn” an den wir ja eben in der Config definiert haben ($g_source_control_account = 'svn';).

EDIT am 20.05.2011:

Ich hatte nach einem Update von Debian lenny auf squeeze gerade folgenden Fehler:


Error: post-commit hook failed (exit code 2) with output:
Error: /usr/local/svn/repository/hooks/post-commit: 60: Syntax error: redirection unexpected

Die Lösung ist relativ einfach. Wir tauschen die Zeile mit dem PHP-Call (/usr/bin/php -q /var… usw.) einfach gegen folgende Zeile aus:


echo “Changeset [${REV}] by $auth, $dt$n$log$n$border$changed$border” | /usr/bin/php -q /var/bugtracker/core/checkin.php

 
 

Leave a Reply

You must be logged in to post a comment.