Subversionコミット時にtracチケットの自動クローズ、をWindowsで

これが大層便利そうなので導入しようとしたら、コミット時の動作がシェルスクリプトで書かれているためにWindows環境ではこのままでは動作させることができませんでした。

ということで簡単なバッチファイルを書いて、同じ事をWindows環境でも動くようにしてみたので、そのメモです。

まずSubversionリポジトリフォルダの下にあるhooksフォルダに、post-commit.batというファイルを作り、以下のように書きます。

C:/python23/python.exe d:/svn/repos/hooks/post-commit.py %1 %2

C:/python23/ と d:/svn/ は各自の環境のものに置き換えてください。

で、次に同じフォルダにpost-commit.pyを作成し、以下のように書きます。


import sys, os

repos = sys.argv[1]
rev = sys.argv[2]

log = os.popen("svnlook log -r " + rev + " " + repos).read().strip()
author = os.popen("svnlook author -r " + rev + " " + repos).read().strip()

os.popen("C:/python23/python.exe d:/svn/repos/hooks/trac-post-commit-hook -p \"C:/trac/project\" -r \""
+ rev + "\" -u \"" + author + "\" -m \"" + log + "\"")


やっていることはリンク先のサイトのシェルスクリプトと同じです。svnlook.exeが環境変数に登録されていない場合は(普通にインストールしたらされていると思います)、フルパスで指定してください。また先ほどと同様に、C:/python23とd:/svn/は環境に合わせて書き換えてください。

あとはtracのアーカイブの中にある、contrib/trac-post-commit-hookをコピーしてくれば完了です。

trac-post-commit-hookのソースをちらっと見た感じではFixedのほかに、CloseやClosedなどと書いてもチケットが閉じられるようです。バグ以外のチケットを実装した時はClosedの方が良さそうですね。