post-commit フックスクリプト
あまり深く考えずに書いたらこうなった。
#!/bin/sh export LANG=ja_JP.utf-8 REPOS="$1" REV="$2" SVN="/opt/CollabNet_Subversion/bin/svn" NKF="/usr/local/bin/nkf" SENDMAIL="/usr/sbin/sendmail" TMPFILE=/tmp/post-commit.$$ BASEPATH="/var/svn-repos/" BASEURL="http://foo.example.jp/repos" PREV=`expr ${2} - 1` REPO=`echo ${REPOS} | sed -e "s#${BASEPATH}##g"` URL="${BASEURL}/${REPO}" TO="hiro-ueda@example.jp" FROM="hiro-ueda@example.jp" exec 2>&1 exec 1>${TMPFILE} CleanUp(){ rm -f ${TMPFILE} exit $1 } trap 'CleanUp' 1 2 3 5 15 echo "From: ${FROM}" echo "To: ${TO}" echo 'Subject: =?ISO-2022-JP?B?GyRCJWolXSU4JUglahsoQg==?=' echo " '${REPO}' =?ISO-2022-JP?B?GyRCJCw5OT83JDUkbCReJDckPxsoQg==?=" echo "Content-Type: text/plain; charset=iso-2022-jp" echo "MIME-Version: 1.0" echo echo "リポジトリ ${REPO} が更新され、rev. ${REV} になりました。" | sed -e "s#${BASEPATH}##g" echo echo "チェックインのログ:" ${SVN} log -r ${REV} ${URL} | sed -e "s#${BASEURL}##g" echo echo "追加(A)・変更(M)・削除(D)されたファイル・ディレクトリ:" echo "------------------------------------------------------------------------" ${SVN} diff --summarize -r ${PREV}:${REV} ${URL} | sed -e "s#${BASEURL}/##g" echo "------------------------------------------------------------------------" cat ${TMPFILE} | ${NKF} -Wjm0 | ${SENDMAIL} -t -f${FROM} rm -f ${TMPFILE} CleanUp 0
post-commit の引数がリポジトリのパスとリビジョン番号だけとは思わなかったなぁ。コミットしたユーザ名くらいは取れるのかと思ったんだが… svn log とかで頑張れば取れなくないけど、そこまでしなくていいか。