snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

Trac と Subversion を連携させる

Trac の配布アーカイブやリポジトリの contrib ディレクトリにある trac-pre-commit-hook と trac-post-commit-hook スクリプトを利用すると、 Trac と SCM を連携させる事ができる。 今回は Trac と Subversion を連携させてみる。

環境 : CentOS 4.6 / Subversion 1.1.4-2 (rpm) / Trac 0.10.4-1 (rpmforge)

標準状態でも Subversion のコミット・ログに #4 とか書いておくと、 Trac のリポジトリ・ブラウザがチケット 4 へのリンクに変換してくれる。 上記のスクリプトを利用すると、メッセージ (今回は Subversion のコミット・ログ) を Trac のチケット・コメントとして投稿し、それにチェンジセットへのリンクを追加してくれる。 これによって、要求と、変更内容の双方向リンクが作成できる。

スクリプトに与えるメッセージ (コミット・ログ) には、 キーワードとチケット番号が含まれている必要がある。 ここではそれをチケット・コマンドと言う事にする。

チケット・コマンドはコマンドとチケット番号から成り、 他の語句とは英数字以外で分離している必要がある。

コマンドは 2 種類あって、それぞれ複数の書き方ができる。 大文字、小文字の区別はない。

address, references, refs, re コマンドは、メッセージを指定したチケット番号にコメントとして投稿し、 チェンジセットへのリンクを作成する。

これはチケット references #4 に対するコメントになる
これ refs #4 は上と同じ

closes, fixes コマンドは、 それに加えてチケットを close する。

これはチケット closes #21 に対するコメントになり、しかもクローズする
これ fixes #21 は上と同じ

チケット番号はコマンドに対して複数指定可能。

チケット番号を複数指定する例 refs #14 #27
こう書いても refs #14, #27
こう書いても refs #14 & #27
こう書いても refs #14 and #27 同じ
異なる方法で refs #1, #2 & #3 and #4 指定してあっても平気

コマンドが混在していても良い。

refs #5, #6 and #9
fixes #7 & #8

詳細はスクリプトと Python ライブラリリファレンスの 4.2.1 正規表現のシンタックス を参照。

で、ここからが連携の為の作業。

trac-pre-commit-hook スクリプトは、 メッセージに有効なチケット・コマンドが含まれるかチェックする。 有効と判断されるには、 チケット・コマンドの書式が正しい、 チケットが存在する、 チケットが close されていない、 事が必要。 含まれていない場合は 0 以外の終了コードを返す。

$ python /usr/local/trac/contrib/trac-pre-commit-hook
Usage: /usr/local/trac/contrib/trac-pre-commit-hook <trac_project> <log_message>

pre-commit フック・スクリプトから trac-pre-commit-hook を実行して、 コミット・ログにチケット・コマンドを書かないとコミットできない様にする。

#!/bin/sh

REPOS="$1"
TXN="$2"

TRAC_ENV='/var/lib/trac/tractest'
LOG=`/usr/bin/svnlook log -t "$TXN" "$REPOS"`

/usr/bin/python /usr/local/trac/contrib/trac-pre-commit-hook "$TRAC_ENV" "$LOG" || exit 1

trac-post-commit-hook スクリプトは、 メッセージに含まれるチケット・コマンドを解釈し、 該当するチケットにコメントとして投稿する。 且つそのコメントにチェンジセットへのリンクを付加する。 また、コマンドが closes, fixes の場合、そのチケットを close する。

$ python /usr/local/trac/contrib/trac-post-commit-hook --help
usage: trac-post-commit-hook [options]

options:
  -h, --help            show this help message and exit
  -eENV, --require-envelope=ENV
                         Require commands to be enclosed in an envelope. If
                        -e[], then commands must be in the form of [closes #4].
                        Must be two characters.
  -pPROJECT, --project=PROJECT
                        Path to the Trac project.
  -rREV, --revision=REV
                        Repository revision number.
  -uUSER, --user=USER   The user who is responsible for this action (not used
                        anymore)
  -mMSG, --msg=MSG      The log message to search (not used anymore)
  -cENCODING, --encoding=ENCODING
                        The encoding used by the log message (not used anymore)
  -sURL, --siteurl=URL  The base URL to the project's trac website (to which
                        /ticket/## is appended).  If this is not specified, the
                        project URL from trac.ini will be used.

post-commit フック・スクリプトから trac-post-commit-hook を実行して、 コミット・ログを通じてチケットと変更内容を関連付ける。

#!/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/tractest'

/usr/bin/python /usr/local/trac/contrib/trac-post-commit-hook \
 -p "$TRAC_ENV"  \
 -r "$REV"       \
 -u "$AUTHOR"    \
 -m "$LOG"

-s オプションを付けても付けなくても変わりなかった。

-e オプションでチケット・コマンドを囲む文字を指定できる。 例えば -e "[]" とすると refs #1 では認識されず、[refs #1] と書く必要がある。 ただし、trac-pre-commit-hook はこれに該当するオプションが無いので refs #1 を 有効なチケット・コマンドと認識してしまう。

参考
[Think IT] 第4回: チケットとソースコードを連携せよ! (1/3)

« Subversion リポジトリのバックアップ、リストア|Top|Subversion のフック・スクリプト (コミット関連) »

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://snbhsmt.blog110.fc2.com/tb.php/87-86cdbe2f

Top

HOME

Author:snbhsmt
http://www.ksky.ne.jp/~snbhsmt/

Twitter/snbhsmt

11  09  08  07  06  03  02  11  10  09  06  05  04  03  02  01  12  11  10  08  07  05  04  01  12  09  08  07  05  04  03  02  12  11  07  01  09  08 

全ての記事を表示する

この人とブロともになる

今すぐブログを作ろう!

Powered By FC2ブログ