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.
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
Felix Brüning am :
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 :
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:
Der neue Master-Branch auf Github https://github.com/mantisbt-plugins/source-integration scheint den Code im wesentlichen eingebaut zu haben.
Michael am :
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.