subversionのログが編集(更新)できない2/作者(Author)も変更編
暫く前に、subversionのログが編集できない(Windows環境)のはバッチファイル用意して解決してね。と書いたけど、先日そのエントリに対してコメントを頂いた。
kotlin.Unit
作者の変更方法って知っていますか?
試してみたら確かに変更できない。
改めてhookについておさらい。
コミットログの内容や作者(Author)を後から変更(編集)する事はデフォルトで許可されていない。
これらは必要に応じ、hookスクリプトを設置することで解決する。
リポジトリを生成すると、hookスクリプトのテンプレートも生成される。
$ svnadmin create ./hoge
// リポジトリ生成
$ su
Password:
# chgrp -R apache ./hoge/*
// WebDAVを利用しているのでgroupをapacheに
# ls hoge
README.txt conf dav db format hooks locks
// hookフォルダも作られる
# ls -la ./hoge/hooks/
total 44
drwxrwxr-x 2 fuga apache 4096 May 21 17:45 .
drwxrwxr-x 7 fuga fuga 4096 May 21 17:45 ..
-rw-rw-r– 1 fuga apache 2015 May 21 17:45 post-commit.tmpl
-rw-rw-r– 1 fuga apache 1638 May 21 17:45 post-lock.tmpl
-rw-rw-r– 1 fuga apache 2255 May 21 17:45 post-revprop-change.tmpl
-rw-rw-r– 1 fuga apache 1567 May 21 17:45 post-unlock.tmpl
-rw-rw-r– 1 fuga apache 2934 May 21 17:45 pre-commit.tmpl
-rw-rw-r– 1 fuga apache 2038 May 21 17:45 pre-lock.tmpl
-rw-rw-r– 1 fuga apache 2764 May 21 17:45 pre-revprop-change.tmpl
-rw-rw-r– 1 fuga apache 1979 May 21 17:45 pre-unlock.tmpl
-rw-rw-r– 1 fuga apache 2137 May 21 17:45 start-commit.tmpl
// hookスクリプトのテンプレートが用意されている
そして、デフォルトでログメッセージの編集を試みると以下のように叱られる(from TortoiseSVN)。
DAVリクエストに失敗しました。リポジトリのpre-revprop-change フックが機能不全であるか存在しない可能性があります
1つ以上の属性を変更できませんでした。リポジトリに変更は加えられていません
属性 log を設定中にエラーが発生しました:
Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook
「pre-revprop-change hook作れ」と言っているので、テンプレートを用いて設置する。
と言っても、ファイル名の変更と実行権限を与えるだけだ。
DAVリクエストに失敗しました。リポジトリのpre-revprop-change フックが機能不全であるか存在しない可能性があります
1つ以上の属性を変更できませんでした。リポジトリに変更は加えられていません
属性 author を設定中にエラーが発生しました:
‘pre-revprop-change’ hook failed with error output;
Changing revision properties other than svn:log is prohibited
ログ以外を変更することを禁ず
この理由はpre-revprop-changeの内容を見てみるとわかる。
(コメント部省略)
REPOS=”$1″REV=”$2″USER=”$3″PROPNAME=”$4″ACTION=”$5″
if [ “$ACTION” = “M” -a “$PROPNAME” = “svn:log” ]; then exit 0; fi
echo “Changing revision properties other than svn:log is prohibited” >&2exit 1
実施内容がM(Modified)で、プロパティ名がsvn:log(つまりログ)の場合、exit 0で抜ける。それ以外では、メッセージ出力して要求は実行されない。
この内容では、ログの変更しか行えないので、svn:authorも許可してやる。
修正前:
if [ “$ACTION” = “M” -a “$PROPNAME” = “svn:log” ]; then exit 0; fi
修正後:
if [ “$ACTION” = “M” -a \( “$PROPNAME” = “svn:log” -o “$PROPNAME” = “svn:author” \) ]; then exit 0; fi
少し長くなってしまった。
if [ “$ACTION” = “M” ]; then exit 0; fi