Ads by Google
新しい記事を書く事で広告が消せます。
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)
コメント
コメントの投稿
トラックバック
http://snbhsmt.blog110.fc2.com/tb.php/87-86cdbe2f

