MantisとSubversionとの連携
MantisとSubversionとの連携をさせてみました。基本的にMantisにはソース管理ソフトなどとの連動が考えられています
http://www.alles.or.jp/~sogabe/mantis/article/article1.html
基本的な流れは以下の通りです。
- コミットする際に、ログに「 issue #0000004 」という形式で改善要求のIDを登録
- Subvesionのフックであるpost-commitが起動
- post-commitは、svnlookコマンドを起動し、登録したい情報をmantisのcore/checkin.phpの標準入力に渡す
- 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リーダーやブラウザから定期的に呼び出されると思います。
その場合には同時に呼ばれることがあるので、実行中には再度呼ばれないように処理を追加する必要があります。