MantisとSubversionとの連携


MantisとSubversionとの連携をさせてみました。基本的にMantisにはソース管理ソフトなどとの連動が考えられています

http://www.alles.or.jp/~sogabe/mantis/article/article1.html

基本的な流れは以下の通りです。

  1. コミットする際に、ログに「 issue #0000004 」という形式で改善要求のIDを登録
  2. Subvesionのフックであるpost-commitが起動
  3. post-commitは、svnlookコマンドを起動し、登録したい情報をmantisのcore/checkin.phpの標準入力に渡す
  4. core/checkin.phpは、標準入力から取得した文字列に「 issue #0000004」が含まれていれば、 そのIDをもつ改善要求のコメントにその文字列を登録し、履歴に登録

core/checkin.phpは、登録ユーザや「 issue #0000004 」といったキーとなる文字列などの設定情報は、config_inc.phpから取得します。

上記の解説記事ではコミットイベントで登録していますが、別サーバーの場合の連携作業になります。

様はコミットログをcheckin.phpに渡せばいいので、以下のようにコミットログを取得します。

svn log --incremental -v -r 27 http://192.168.0.1/svn/test/ 

リビジョン番号ですが、1件ずつ処理を行う必要がありますので、最後に取得成功した番号を保存しておき、取得できなくなるまでカウントアップしていきます。

$exec = "svn log --incremental -v -r $no http://192.168.0.1/svn/test/ ";
$out = system( $exec );

if( 0 < strlen( $out ) ){
    // 取得!
    $no++;
    $exec = "echo '$out' | php mantis/core/checkin.php";
    $out = system( $exec );
}

上記の処理を失敗するまでループします。実環境の場合には毎分呼んでいるので一度に1件しか処理していませんが。。。

ただし、このままだと文字コードが環境に依存するので、文字コードを指定して動かします。

$exec = "export LANG=ja_JP.UTF-8;svn log --incremental -v -r $no http://192.168.0.1/svn/test/ ";

UTF8に固定して呼び出します。

cron 使えない環境の場合には Mantis のRSS生成部分に仕込んでおくとRSSリーダーやブラウザから定期的に呼び出されると思います。

その場合には同時に呼ばれることがあるので、実行中には再度呼ばれないように処理を追加する必要があります。