19 February 2012

(Subversion) ログメッセージを書き換えたり、svnsyncの同期先にする時の制限解除

Subversionリポジトリのログメッセージに「不適切」な内容が含まれていたので、書き換えようとしたり、svnsyncの同期先にするためにリポジトリの属性を書き換えようとすると…


# svn propedit -r 5 --revprop svn:log
svn: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook

# svnsync init https://example.com/svn/HOGEHOGE/ https://example2.com/svn/HOGEHOGE2
svnsync: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook

というエラーメッセージが出力される。pre-revprop-change というフック スクリプトを作れと書いてあるが、何のことやら…。次のようなページを見つけて、その通り実行。

Changing svn author property

まず、Subversionが稼動しているサーバに(sshなどで)ログオンして、リポジトリのあるフォルダへ。


# cd ~/var/svn/HOGEHOGE_REPO/hooks/

# cp pre-revprop-change.tmpl pre-revprop-change

# chmod +x pre-revprop-change

最後の実行権限を与えるのを忘れると、”svn: Revprop change blocked by pre-revprop-change hook (exit code 255) with no output.” というエラーメッセージが表示されるので、忘れないように…

svnsyncでたくさんの属性を書き換えるような場合は、pre-revprop-change を編集して、スクリプトが無理やり 0 を返すようにしてしまえばよい

pre-revprop-change

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

exit 0 ← この行を追加

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi

echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1