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

参考

http://subversion.bluegate.org/doc/ch05s02.html

http://www.geocities.jp/geo_sunisland/index.html