ひとつのsvnレポジトリで複数のTracプロジェクトのときのpost-commitの例

なときに、svnディレクトリに応じてtrac-post-commit-hookの実行対象となるTracプロジェクトを切り替えるpost-commitの例。

Tracプロジェクトごとにsvnレポジトリをわければいいんだけど、のっぴきならない理由でそれができないときに。

#!/bin/sh

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

# exec >/tmp/post-commit.log 2>&1

trac_post_commit() {
  PROJECT=$1
  LOG=`/usr/bin/svnlook log -r $REV $REPOS`
  AUTHOR=`/usr/bin/svnlook author -r $REV $REPOS`
  TRAC_ENV="/home/trac/${PROJECT}"
  TRAC_URL="http://example.org/trac/${PROJECT}/"

  env LANG=ja_JP.UTF-8 \
    /usr/bin/python /home/svn/hooks/trac-post-commit-hook \
    -p "$TRAC_ENV"  \
    -r "$REV"       \
    -u "$AUTHOR"    \
    -m "$LOG"       \
    -s "$TRAC_URL"  \
    ;
}

DIRS=$(/usr/bin/svnlook dirs-changed -r $REV $REPOS)

for dir in $DIRS; do
  PROJECT=
  case $dir in
    FOO/)
      PROJECT=FOO
      ;;
    test/)
      PROJECT=sandbox
      ;;
    boozy/)
      PROJECT=boozy
      ;;
    *)
      ;;
  esac

  if [ -n "$PROJECT" ]; then
    trac_post_commit $PROJECT
  else
    :
  fi
done