自動バージョン化

Subversion クライアントはまだ完全な DeltaV クライアントではありませんし Subversion サーバも完全な DeltaV サーバではありませんが、 WebDAV 協調動作できるうれしい機能があります: それは自動バージョン化と 呼ばれるものです。

自動バージョン化は DeltaV 標準ではオプションで実装することのできる機能 として定義されているものです。典型的な DeltaV サーバは単純なWebDAV ク ライアントがバージョン管理下にあるファイルに対して PUT命令を実行してすることを拒否します。バージョン管 理下にあるファイルを変更するにはサーバに対して適切なバージョン要求が必 要になります: それはたとえば MKACTIVITY, CHECKOUT, PUT, CHECKINのような感じの命令です。しかし DeltaV サーバ が自動バージョン化をサポートすると基本的な WebDAV クライアントからの書き込み 要求も受け付けられるようになります。サーバはクライアントが適切なバージョン要求 のコマンド列を発行した*かのように*振舞い、内部的にコミットを実行します。 言い換えると DeltaV サーバは通常の WebDAV クライアントと協調動作できる ようになります。

すでに非常にたくさんのオペレーティングシステムが WebDAV クライアント機能 を備えているのでこの機能は非常に広範囲にわたって利用できることに なります: 通常のユーザが Microsoft Windows や Mac OS を実行しているような オフィスを考えてみてください。それぞれのユーザは Subversion リポジトリを 「マウント」し、しかもそれは通常のネットワークフォルダのように 見えます。通常やっているような共有フォルダを使うのと同じ感覚で操作できます: ファイルを開き、編集し、そして保存します。一方サーバは自動的にすべてを バージョン化します。管理者の側では(あるは知識のあるヘビーユーザは)依然として Subversion クライアントを使ってこの履歴を調べたり、古いバージョンのデータ を取得することができるのです。

この筋書きは架空のものではありません: Subversion 1.2 かそれ以降では 実際に動作するのです。mod_dav_svn で自動バージョン化機能を有効にする にはhttpd.confの Location ブロック中で SVNAutoversioningディレクティブを使ってください。 こんな感じです:

<Location /repos>
  DAV svn
  SVNPath /path/to/repository
  SVNAutoversioning on
</Location>

SVNAutoversioning が有効な場合には WebDAV クライアントからの要求は 不分割なコミットとなります。一般的なログメッセージが自動生成され それぞれのリビジョンにつけられます。

しかしこの機能を有効にする前に本当にやろうとしていることを理解して ください。WebDAV クライアントは たくさんの 書き込み要求を実行しがちであり、これは自動的にコミットされる非常に たくさんのリビジョンが発生することを意味します。たとえば データを保存する場合、たくさんのクライアントがゼロバイトのファイルの PUTを実行し、その後に別の PUT が実際のデータをともなって実行されるでしょう。単一のファイル書き込み が二つの別々のコミットになってしまいます。さらに多くのアプリケーション では数分に一度の自動保存機能がはたらき、さらに多くのコミットが発生 してしまうでしょう。

たとえばメールを送信するようなpost-commitのフックプログラムがある 場合、email 生成を完全に禁止したいと思うか、リポジトリの特定の部分に 関して禁止したいと思うかも知れません; それは email の流入量が 意味のある通知と考えられるかどうかにかかっています。さらに、賢い post-commitフックプログラムは自動バージョン化機能によって発生した トランザクションと通常の svn commitによって発生したトランザクションとを区別する ことができます。これには svn:autoversionedという 名前のリビジョンプロパティーを見るとうまくいきます。もし存在して いればそのコミットは一般的な WebDAV クライアントによるものです。