subversionのログが編集(更新)できない2/作者(Author)も変更編

 暫く前に、subversionのログが編集できない(Windows環境)のはバッチファイル用意して解決してね。と書いたけど、先日そのエントリに対してコメントを頂いた。
subversionのログが編集(更新)できない
http://www.ivoryworks.com/blog/2008/04/subversion.php

作者の変更方法って知っていますか?

 試してみたら確かに変更できない。
 改めて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作れ」と言っているので、テンプレートを用いて設置する。
と言っても、ファイル名の変更と実行権限を与えるだけだ。

$ mv pre-revprop-change.tmpl pre-revprop-change
$ chmod 754 pre-revprop-change

 クライアントからの編集アクションが実施されるとこのスクリプトが実行される。
 これでログメッセージの編集は可能となるが、作者の編集を行うとエラーとなる。

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” >&2
exit 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

でも良いのだが、こういったものを許可するのは少しずつがいい(全部削除して exit 0 と書いても要望は満たされるが乱暴すぎる)。
リポジトリの作成と設定
http://subversion.bluegate.org/doc/ch05s02.html
UNIX & Linux コマンド・シェルスクリプト リファレンス
http://www.geocities.jp/geo_sunisland/index.html
Related Posts

Comments are closed.