コミットされたファイルの拡張子によりMIME typeを決定し、
svn:mime-type属性に付与しようとしました。
ファイルの追加時のみsvn:mime-type属性値が存在するかチェックすることにして、
ファイルの編集時は省略することにします。
結論から言うとスマートにはできません。
まだやってませんが以下のようなことをしなければならなそう。
・svn:mime-typeを付与するためだけの作業コピーをサーバに用意し、
post-commitフックでsvn:mime-type属性値をセットして再度コミットする
・コミットのストリームを横取りしてsvn:mime-typeを付与するように書き換える(可能か?)
・svnクライアント側でsvn:mime-typeが付与されるようにする
以下作業記録。
start-commitフックおよびpre-commitフックでsvn:mime-typeをはじめとする属性を
編集することは不可能です。
start-commitフックが受け取る引数は
・REPOS
・USER
pre-commitフックが受け取る引数は
・REPOS
・TXN
ですが、トランザクションを指定して属性を編集する方法が無いからです。
これらはコミットを中止したり、コミットする人にメッセージを伝達する時に有用でしょう。
次にpost-commitフックで属性を編集しようとしました。
post-commitフックが受け取る引数は
・REPOS
・REV
です。
svn propsetコマンドおよびsvn propeditコマンドは、2通りの方法で属性を編集することができます。
1. 作業コピー内にあるバージョン管理下の属性をローカルで変更して、コミットする
2. リポジトリのリビジョンに関する、バージョン管理下にないリモートの属性を変更します。
<対象> には、アクセスするリポジトリを決める意味しかありません。
1.はMIME typeを付与するためだけに作業コピーが必要で、コミットも再度発生するということです。
2.はリビジョン全体のファイルが対象となってしまいます。