コミットされたファイルの拡張子により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.はリビジョン全体のファイルが対象となってしまいます。

カテゴリー: 技術情報