snbhsmt_log

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

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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

snbhsmt

Author:snbhsmt
Google Profiles

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

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。