Subversionリポジトリの一覧

Subversion によるバージョン管理にあるような理由で、すべてのプロジェクトを1つのリポジトリに収めるのではなく、いくつかのリポジトリに分割したい。これをWebDAVから扱うにはSVNParentPathによって、特定ディレクトリ以下のディレクトリをすべてSubversionリポジトリとして扱うのが楽である。リポジトリを追加しても設定ファイルの変更もApacheの再起動も必要ない。

<Location /svn-dav>
  DAV svn
  SVNParentPath /path/to/repositories/parent/directory/
  SVNAutoversioning on

  AuthType Digest
  AuthName "Subversion Repository"
  AuthDigestDomain /svn/
  AuthDigestFile /path/to/.htdigest
  Require valid-user

  BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
</Location>

問題はこれらのリポジトリをどうやって一覧するか、ということである。単純に、<Location></Location>内にOption +Indexesしたのではうまくいかなかった。そこで、Subversionによるバージョン管理を行う実体は他のパスに配置することにして(仮想パス・仮想ファイルシステムについて実態って言うのも変だけど)、そのパスにmod_rewriteで転送することにした。以下を見たほうが早い。

<Location /svn-dav>
  DAV svn
  SVNParentPath /path/to/repositories/parent/directory/
  SVNAutoversioning on

  AuthType Digest
  AuthName "Subversion Repository"
  AuthDigestDomain /svn/
  AuthDigestFile /path/to/.htdigest
  Require valid-user

  BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
</Location>

Alias /svn/ /path/to/repositories/parent/directory
Alias /svn /path/to/repositories/parent/directory
<Location /svn>
  Options +Indexes
</Location>

RewriteEngine on
RewriteRule ^/svn/(.+)$ /svn-dav/$1 [PT]
RewriteLog /path/to/rewrite_log
RewriteLogLevel 1

これで目的は達成された。リポジトリを追加すれば確実に一覧に出てくるし、それ以上は何の設定も再起動も必要ない。

2007-06-06追記

上記Subversion 1.3以前のノウハウになる。Subversion 1.3以降ではSVNListParentPath onで解決するらしい。まだ他にもWebDAVまわりで何かしら応用のしどころはあるはずだー、と悔し紛れに言ってみる。