2008-02-22

subversion + trac on gentoo

このエントリーをはてなブックマークに追加

Gentoo Linux上に subversion と trac の開発管理環境を構築してみました。

今回は基本的なインストールと設定に加え、subversion でコミットすると自動で trac の ticket をクローズしてくれるように設定しました。コミット時のログに closes #2 と書くと、自動で trac の 2番目の ticket をクローズします。

commit と ticket を対応させると、あるticket をクローズするのに必要だった変更を、簡単に見ることができます。これは作業の「見える化」を高め、問題解決やモチベーションの向上につながると考えられます。

更に ticket をクローズしないコミットをはじくようにもできます。ticketをクローズしないようなコミットをはじくことで、意味の分からないコミットを防止できるでしょう。

パッケージのインストール

まずパッケージをインストールします。portage では全てパッケージが準備されているので簡単です。

今回は trac を mod_python で利用したので mod_python もインストールします(確か portage の依存関係で自動的にインストールされないと思います)。

# emerge apache mod_python subversion trac

私の環境ではUSEフラグにpythonを指定していなかったので、 tracのインストール時に、 python を USE フラグに指定して clearsilver をインストールするようにエラーが出ました。

この際なので、グローバルに python を USE フラグに指定して emerge し直しました。

# emerge clearsilver trac

これでインストール作業は完了です。

subversion の設定

必要なソフトがインストールされたので、実際に設定をして動くようにしてゆきましょう。今回は test_project というプロジェクトを管理してみることにしましょう。

まず、レポジトリを作成します。既に、他の場所にある方は読みかえて下さい。

# mkdir -p /home/repos/
# svnadmin create /home/repos

次に新しいモジュールとして test_project を import してみましょう。

$ mkdir test_project
$ svn import file:///home/repos/test_project -m "Initial import."

これで subversion で test_project のソースが管理できるようになりました。

trac の設定

次に、 trac で subversion と連携してプロジェクトを管理できるようにしてゆきましょう。

trac をインストールすると、 POST-INSTALL INSTRACTIONS というメッセージが表示されます。基本的には、このメッセージを頼りに設定ができるのでしょうから従っていきます。

まず、trac の環境を初期化します。

# trac-admin /var/lib/trac/testproject initenv

必要な質問に答えてゆきます。

次にBasic認証のためのパスワード・データベースを作成します。username には、あなたのユーザ名を入れて、パスワードを設定します。

# htpasswd2 -c /etc/apache2/trac.htpasswd user-name

次に cgi での設定が書いてありましたが、今回は mod_python を利用して動かしますので別の設定をしました。

まず mod_python を利用する設定を /etc/conf.d/apache2 内の APACHE"_OPTSに-D PYTHONをを追加します。以下のようになるでしょう。

APACHE2_OPTS="-D PYTHON -D DEFAULT_VHOST"
次に、 /etc/apache2/vhosts.d/00_default_vhost.conf に、以下の行を追加します。先程と同様、username には、あなたのユーザ名を入れて下さい。
<Location "/trac/testproject">
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /var/lib/trac/ntop
PythonOption TracUriRoot /trac/ntop
</Location>

<Location "/trac/testproject/login">
AuthType Basic
AuthName "user-name"
AuthUserFile /etc/apache2/trac.htpasswd
Require valid-user
</Location>

以上で trac の基本的な設定は完了です。 apache を起動してみましょう。

# /etc/init.d/apache start

ブラウザで http://localhost/tracにアクセスしてみましょう。tracの画面が表示されるはずです。

コミット時にチケットをクローズ

以上で基本的に subversion と trac を利用できますが、更に便利にしてみましょう。

ソースをコミットする時に、自動的に関連する ticket をクローズするようにして、更にはオープンなチケットをクローズしないコミットを受け入れないように設定してみましょう。

まず、trac に付属しているフックファイルを移動します。どこでもいいのですが、今回は subversion のレポジトリ内の hooks ディレクトリに置いてみましょう。

# cd /usr/share/doc/trac-*/contrib/
# cp tac-post-commit-hook.bz2 trac-pre-commit-hook.bz2 /home/repos/hooks
# cd /home/repos/hooks
# bzip -d *bz2

次に hook ファイルを作成します。

/home/repos/hooks 内に以下の二つのファイルを作成し、実行ファイルにします。

pre-commit

#!/bin/sh

REPOS="$1"
TXN="$2"
TRAC_ENV='/var/lib/trac/ntop'
LOG=`/usr/bin/svnlook log -t "$TXN" "$REPOS"`
/usr/bin/python ${REPOS}/hooks/trac-pre-commit-hook "$TRAC_ENV" "$LOG" || exit 1

post-commit

#!/bin/sh

REPOS="$1"
REV="$2"
LOG=`/usr/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/usr/bin/svnlook author -r $REV $REPOS`
TRAC_ENV='/var/lib/trac/ntop'
TRAC_URL='http://localhost/trac/ntop'
/usr/bin/python ${REPOS}/hooks/trac-post-commit-hook \
 -p "$TRAC_ENV"  \
 -r "$REV"       \
 -u "$AUTHOR"    \
 -m "$LOG"       \
 -s "$TRAC_URL" || exit 1
# chmod +x post-hooks pre-hooks

これで、コミット時にオープンなチケットへの言及がないファイルはエラーとなります。

チケットへの言及は、 closes #2 などと書きます。closesはコマンドで、#2 がオープンなチケット番号です。

コマンドはclosesの他に fixes, addresses, references, refes, re などがあります。fixes #2 and #4fixed #2 & #4 という書き方もできるようです。


参照

仕様書いらずの新ネットサービス構築法……仕様書なしで、ソニーの映像共有サービス「eyeVio」の構築に際し、機能要求を ticket を切ることで管理した事例を紹介。

チケット駆動開発 … ITpro Challenge のライトニングトーク (4) - まちゅダイアリー ...……タイトル通りチケット駆動の開発を紹介。