Skip to content

Mantis: Git-Integration - ein steiniger Weg

Sehr praktisch ist es bei einem Bugtracker, wenn er mit dem verwendeten Versions-/Sourcecode-Verwaltungssystem (SCM-System, source code management) interagieren kann, Änderungen im Code, die - laut Kommentar (Commit-Message) - einen bestimmten Fehler beheben, also direkt auch dazu führen, daß der entsprechende Fehlerbericht (Bugreport) als erledigt gekennzeichnet wird. Man kennt dieses Verhalten - bspw. - vom Debian-Bugtracker.

Grundsätzlich ist das auch schon immer mit Mantis möglich; allerdings war die bisher vorhandene Unterstützung rudimentär und primär auf SVN abgestellt; sie wurde auch in der aktuellen Entwicklungsversion 1.3 entfernt. Seit Anfang 2009 gibt es nämlich von einem der Mantis-Entwickler, John Reese, ein Plugin namens Source Control Integration, das sich beim Bugtracker für Mantis selbst bereits seit Monaten im Echtbetrieb bewährt hat. Es liefert ein Framework für die Anbindung beliebiger Versionsverwaltungssysteme, und fertige Plugins für die Anbindung an git via GitHub oder GitWeb und an SVN via SourceForge oder WebSVN sind direkt dabei.

Leider ist auch hier die Dokumentation der schwache Punkt. Eine solche fehlt nämlich bisher völlig; einen Einstieg liefert einzig ein Blogbeitrag vom 07.01.2009, der die Vorgehensweise beschreibt. Weitere Blogbeiträge (von März und Oktober 2009) umreißen die technischen Grundlagen und beschreiben den Einsatz für Subversion, helfen aber ansonsten auch nicht wirklich weiter.

Ich habe mir die Vorgehensweise bisher folgendermaßen zusammengereimt:

  • Download der nötigen Plugins (Meta Programming, Source Control Integration und - in meinem Fall - Gitweb Integration). Fertige Lösungen scheint es dafür nicht zu geben, die Plugins sind offenbar aus dem Git-Repository des Entwicklers auszuchecken (dabei finden sich die vorgenannten Plugins für die Anbindung an git und SVN im selben Repository wie Source Control Integration). Danach gehören die entsprechenden Verzeichnisse ins Mantis-Plugin-Verzeichnis, das man in Mantis auch unter dem Punkt [Manage] (http://host.domain.example/mantis/manage_overview_page.php) angezeigt findet.
    UPDATE vom 30.10.2012: Das Git-Repository des Entwicklers ist offenbar nicht mehr aktuell bzw. liegt jetzt bei Github: Source Control Integration
    Das Plugin Meta Programming sollte bei Mantis 1.2.x bereits mit dabei sein und muss daher nicht mehr installiert werden..
  • Anschließend sind die Plugins - in der richtigen Reihenfolge - unter [Manage Plugins] (http://host.domain.example/mantis/manage_plugin_page.php) zu installieren.
  • Danach kann das Plugin, wie im genannten Blogbeitrag beschrieben, konfiguriert, ein Repository definiert und dieses dann eingelesen werden.

Letzteres hat bei mir auf Anhieb zu einer eleganten Fehlermeldung geführt:

APPLICATION ERROR #401

Database query failed. Error received from database was #1048: Column ‘author’ cannot be null for the query: INSERT INTO mantis_plugin_Source_changeset_table ( repo_id, revision, parent, branch, user_id,timestamp, author, message, info, ported, author_email, committer, committer_email, committer_id) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ).

Deren Ursache liegt darin, daß das Plugin die Ausgabe von GitWeb nicht richtig parsen kann. In meinem Fall war der Übeltäter die in GitWeb aktivierte Avatar-Funktion; einen Patch dafür findet man im Bugtracker des Entwicklers.

UPDATE: Auch mit der GitWeb-Version 1.7.1 gibt es Schwierigkeiten, namentlich, wenn und weil jetzt die Möglichkeit der Suche nach Commits des jeweiligen Autors aktiviert ist. Wer einen Patch dazu sucht, findet diesen an der bereits genannten Stelle.

UPDATE vom 30.10.2012: Der Bugtracker des Entwicklers ist auf eine statische Archiv-Version zurückgesetzt und enthält den Patch daher nicht mehr. Er findet sich dafür hier in den Kommentaren. - Die aktuelle Version im Github-Repository des Entwicklers scheint ihn aber im wesentlichen bereits eingebaut zu haben.

Danach funktionierte der Import aber und lief wie am Schnürchen.

Jetzt möchte man das nur noch automatisieren; die entsprechende Angabe im genannten Blogbeitrag …

For Gitweb, SourceForge, or WebSVN integration, find your repository’s ID, and setup a cronjob (or something equivalent) to run "curl http://yoururl.xyz/mantisbt/plugin.php?page=Source/repo_import_latest&id=XX"

… ist aber leider unzutreffend, denn die entsprechende Seite kann nur durch einen - eingeloggten - Admin aufgerufen werden. Korrekt ist vielmehr der Aufruf von http://host.domain.example/mantis/plugin.php?page=Source/import&id=XX; das ist die vorgesehene API dafür. Der entsprechende Aufruf kann per Cronjob, aber sicherlich auch als Post-Update-Hook in git verwirklicht werden: curl 'http://host.domain.example/mantis/plugin.php?page=Source/import&id=XX' > /dev/null

Über weitere Erfahrungsberichte zu diesem Thema würde ich mich übrigens freuen. :-)

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Felix Brüning am :

Felix Brüning

Die Seite mit dem Patch ist nicht mehr online, bzw. der Patch nicht mehr sichtbar.

Ich konnte das Plugin zum laufen bekommen indem ich in der Datei "SourceGitweb.php" des Plugins um und bei Zeile 279 den Regex im preg_match aufruf durch Folgendes ersetzte:

#<tr><td>author</td><td>(?:<a[^>]*>)?([^<>]*)(?:</a>)? *(?:<a[^>]*>)?<([^<>]*)>(?:</a>)?</td>(?:<[^<>]*>\s*)*?</tr><tr><td></td><td> \w*, (\d* \w* \d* \d*:\d*:\d*)([^<>]*)</td>#

Da sich der Quellcode der Gitweb Seite offensichtlich verändert hat.

Viele Grüße an den, der das hier noch ließt und dem damit geholfen wird ;-)

Felix

Thomas Hochstein am :

Thomas Hochstein

Stimmt, der Autor hat seinen Bugtracker offenbar deaktiviert bzw. durch eine "statische" Kopie ersetzt, so dass der Patch nicht mehr zugänglich ist. Außerdem scheint der Autor auch sein Git-Repository verlegt zu haben, und zwar zu Github.

Mein Patch gegen den (jetzt nicht mehr) aktuellen Master-Branch im alten Repo auf http://git.mantisforge.org/w/source-integration.git sah so aus:

CODE:
From b5a0da200c60c67fd8cf6599b6f783de74d6c71a Mon Sep 17 00:00:00 2001 From: Thomas Hochstein <thh@inter.net> Date: Tue, 30 Oct 2012 21:26:55 +0100 Subject: [PATCH] Fix parsing of Gitweb commit data.</p> <p>The SourceGitweb plugin does not parse commit data correctly for Gitweb 1.7.2.5 with avatar support.</p> <p>Some changes to the regular expressions are needed.</p> <p>See bug 85: http://leetcode.net/mantis/view85.html#c240</p> <h2 id="signed-off-by-thomas-hochstein-lt-thh-inter-net-gt-">Signed-off-by: Thomas Hochstein <thh@inter.net></h2> <p>SourceGitweb/SourceGitweb.php |    6 ++++—  1 files changed, 4 insertions(+), 2 deletions(-)</p> <p>diff —git a/SourceGitweb/SourceGitweb.php b/SourceGitweb/SourceGitweb.php index 635f75b..325e4a8 100644 —- a/SourceGitweb/SourceGitweb.php +++ b/SourceGitweb/SourceGitweb.php @@ -247,13 +247,15 @@ class SourceGitwebPlugin extends MantisSourcePlugin {                 if ( !SourceChangeset::exists( $p_repo->id, $t_commit[‘revision’] ) ) {</p> <pre><code>                    # Parse for commit data </code></pre> <p>-                       preg_match( ‘#<tr><td>author</td><td>([^<>]<em>) <([^<>]</em>)></td></tr>’. +                       #preg_match( ‘#<tr><td>author</td><td>([^<>]<em>) <([^<>]</em>)></td></tr>’. +                        preg_match( ‘#<tr><td>author</td><td>(?:<a[^>]<em>>)?([^<>]</em>)(?:</a>)? <em>(?:<a[^>]</em>>)?<([^<>]<em>)>(?:</a>)?</td>(?:<[^<>]</em>>\s<em>)</em>?</tr>’.                                 ‘<tr><td></td><td> \w*, (\d* \w* \d* \d<em>:\d</em>:\d*)#’, $t_gitweb_data, $t_matches );                         $t_commit[‘author’] = $t_matches[1];                         $t_commit[‘author_email’] = $t_matches[2];                         $t_commit[‘date’] = date( ‘Y-m-d H:i:s’, strtotime( $t_matches[3] ) );</p> <ul> <li>if( preg_match( ‘#<tr><td>committer</td><td>([^<>]<em>) <([^<>]</em>)></td></tr>#’, $t_gitweb_data, $t_matches ) ) {</li> <li>#if( preg_match( ‘#<tr><td>committer</td><td>([^<>]<em>) <([^<>]</em>)></td></tr>#’, $t_gitweb_data, $t_matches ) ) {</li> <li>if( preg_match( ‘#<tr><td>author</td><td>(?:<a[^>]<em>>)?([^<>]</em>)(?:</a>)? <em>(?:<a[^>]</em>>)?<([^<>]<em>)>(?:</a>)?</td>(?:<[^<>]</em>>\s<em>)</em>?</tr>#’, $t_gitweb_data, $t_matches ) ) {                             $t_commit[‘committer’] = $t_matches[1];                             $t_commit[‘committer_email’] = $t_matches[2];</li> </ul> <h2 id="-">                        }</h2> <p>1.7.2.5

Der neue Master-Branch auf Github https://github.com/mantisbt-plugins/source-integration scheint den Code im wesentlichen eingebaut zu haben.

Michael am :

Michael

Das beschriebene Plugin ist imho leider eine unbrauchbare Krücke. GitHub ist nicht git, und git bietet eigentlich genug Möglichkeiten, mit diversen hooks Aktivitäten im Bugtracker auszulösen. Die gleichen Mechanismen, die GitHub letztendlich auch intern verwendet. DAS wäre der Ansatz, nicht ein verunglücktes site scraping.

Kommentar schreiben

HTML-Tags werden in ihre Entities umgewandelt.
Markdown-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
BBCode-Formatierung erlaubt
Gravatar, Identicon/Ycon Autoren-Bilder werden unterstützt.
Formular-Optionen