以下の内容は古くなっています。新規に書き直しましたので、SCM(ソフトウェア構成管理)システムとの統合を参照してください。
ソフトウェアに対して行われる変更に伴う個々のソースコードの修正履歴やリビジョン管理、 アプリケーション全体のバージョンの管理を支援するシステムです。CVS、SubversionやClear Caseなどが有名です。
通常、バグが発生すると「問題処理票」なるものが発行され、一次分析などを行ってソースコードを修正し、単体試験を行って機能を確認後、 「問題処理票」に修正内容、原因等を記述して、終了となります。この「問題処理票」をManrisに置きかえることで、 情報の共有化や集計といった管理稼動を削減できるわけです。
この「問題処理票」には修正したソース、リビジョンおよび差分を記述するプロジェクトも多いと思います。 Mantisを用いた場合、コメントに記述することになると思いますが、それも面倒で余計な稼動です。 それを調べて登録している間にもバグが登録されていきます。
ここで、MantisとSCM(CVS、Subversion)を統合というか連携すると、コミットする際のログに改善要求のIDを記述しておけば、 自動的に該当の改善要求にコメントが登録されます。 そのときに、ステータスを解決済に変更することもできます。ソースファイル名やリビジョンがあれば、ViewCVSなどを使って、 簡単に差分を把握することができます。
使用する環境は以下の通りです。
改善要求に登録する情報は、svnlookコマンドを使用しますので、mantisとSubversionのサーバは同一サーバである必要があります。
SubversionとMantisの設定はすでに完了しているものとします。
基本的な流れは以下の通りです。
core/checkin.phpは、登録ユーザや「 issue #0000004 」といったキーとなる文字列などの設定情報は、config_inc.phpから取得します。
設定の流れは以下の通りです。
専用のアカウントをMantisに作成します。ここでは、svnuserとします。アカウントは開発者以上にします。
config_default.incにある設定項目をconfig_inc.phpにコピーして、修正します。 ここで設定する値は以下の通りとします。詳細は、ソース管理との統合を参照してください。
| パラメータ | 値 | 詳細 |
|---|---|---|
| $g_source_control_account | svnuser | Mantisに登録する際のアカウントです。 |
| $g_source_control_notes_view_status | VS_PRIVATE | 登録したコメントは非公開とします。 |
| $g_source_control_set_status_to | OFF | 解決済にしたい場合は、RESOLVEDにします。 |
| $g_source_control_regexp | /\bissue [#]{0,1}(\d+)\b/i | 改善要求のIDを指定する文字列の正規表現です。 |
config_inc.phpへの追加例です。
# For open source projects it is expected that the notes be public, however,
# for non-open source it will probably be VS_PRIVATE.
$g_source_control_notes_view_status = VS_PRIVATE;
# Account to be used by the source control script. The account must be enabled
# and must have the appropriate access level to add notes to all issues even
# private ones (DEVELOPER access recommended).
$g_source_control_account = 'svnuser';
# If set to a status, then after a checkin, the issue status is set to the
# specified status, otherwise if set to OFF, the issue status is not affected.
$g_source_control_set_status_to = OFF;
# Regular expression used to detect issue ids within checkin comments.
# see preg_match_all() documentation at
# http://www.php.net/manual/en/function.preg-match-all.php
$g_source_control_regexp = "/\bissue [#]{0,1}(\d+)\b/i";
subversionでは、レポジトリ(/home/sv/repos)のhooksに、コミットする前に起動したり、 コミットした後に起動するスクリプトが用意されています。 今回は、コミットした後にMantisに登録するので、post-commit.tmplを使用します。
また、mantisに登録する情報を標準出力に出力するシェルかコマンドを用意します。 ここでは、簡単に、コミットしたときのログを登録することにしますので、svnlook infoを使用します。
#!/bin/sh
REPOS="$1"
REV="$2"
env LANG=ja_JP.eucJP svnlook info "$REPOS" -r "$REV" \
| /usr/bin/php /var/www/localhost/htdocs/bts/core/checkin.php
svnlookが文字化けしたため、LANGを設定しています。
必ず、core/checkin.phpに渡す情報には、 $g_source_control_regexpで指定した正規表現に適合する文字列が必要です。
上記のsvnlook infoのかわりに以下のようなスクリプトを使用すれば、
変更履歴、変更ファイルおよび変更点を登録できます。(未確認)
#!/bin/sh
PATH=$PATH:/usr/bin
REPOS=$1
REV=$2
echo "[変更履歴]"
svnlook info -r $REV $REPOS
echo "[変更ファイル]"
svnlook changed -r $REV $REPOS
echo "[変更点]"
svnlook diff -r $REV $REPOS