さくらインターネットに構築した trac で trac-post-commit-hook

trac サイトを構築した時のメモ の続き。


trac を構築していて trac-post-commit-hook を使っていないのはありえない、っていうくらい便利な trac-post-commit-hook ですが、さくらに構築したときにものすごく手間取ったのでメモ。

ちなみに trac:0.10.4、subversion:1.2.3 です。

詰まったところ

svnlook の結果が変数に格納されない

svnlook のパスを省略したらだめっぽい。

svnlook で取得したログが文字化け

表示できない文字は、Subversion が ?\xxx で置換する?

  • > LANG=ja_JP.UTF-8 を指定したらいけるはず。
  • > さくらにそんな文字コードはない、と怒られる。
  • > ここ から svnlog2utf8 をダウンロードして、/home/XXX/local/bin/ に置く。それに svnlook の出力を渡したら文字化けしなくなった。
trac-post-commit-hook が実行されない

PYTHONPATH がおかしい?

  • > export PYTHONPATH で解決した。

post-commit

最終的に post-commit はこうなった。XXXはさくらのユーザ名を指定して、TRAC_REPOSに trac のパスを指定する。

#!/bin/sh

REPOS="$1"
REV="$2"

USER_HOME="/home/XXX"
TRAC_REPOS="/path/to/trac/"
BIN="${USER_HOME}/local/bin"
LOG=`${BIN}/svnlook log -r "${REV}" "${REPOS}" | ${BIN}/svnlog2utf8`
AUTHOR=`${BIN}/svnlook author -r "${REV}" "${REPOS}"`

PYTHONPATH=${USER_HOME}/local/lib/python:${USER_HOME}/local/lib/python/site-packages;export PYTHONPATH

/usr/local/bin/python ${REPOS}/hooks/trac-post-commit-hook \
 -p "${TRAC_REPOS}"  \
 -r "${REV}"       \
 -u "${AUTHOR}"    \
 -m "${LOG}"

あとは post-commit と trac-post-commit-hook を、 Subversionリポジトリの hooks ディレクトリにコピーしてやればOK。

さっき気付いたんだけど、Windows版ではチケットに転記されるログが最初の1行だけなのに、さくらに構築したら何もしなくても普通に全部転記されてた。
Windowsでやってた時は、なんとか全部転記させようといろいろ苦労したのになあ?なんでだろう?