きりかノート 3冊め

おあそびプログラミング

svk view で svn:externals に対応(まだ実用的ではない、と思う)

BridgeSupport が RubyCocoa プロジェクトから独立した。で subversion リポジトリでは svn:externals で BridgeSupport を取得するようになった。そこで、svk pull しても svn:externals のコードが取得されないことに気づいた。(ていうか、ふじもとさんに「チェックアウトできないっすよ!」とリフジンな文句つけた。スミマセン)

どうやら svk では svn:externals を解釈してローカルリポジトリには取得してくれないようで、苦労している人が多いみたいで、実装を詳しく提案している人もいる。

まだベータ機能ながら、svk 2.0 で導入された svk view で解決できるらしいと書かれている。なんだこれ?面白そうじゃん、ということでトライ。(今回利用したバージョンは svk 2.0.1)

svk view は svk:view:(ビューの名前) というプロパティを作成することで、仮想的なリポジトリを構成することができる機能だ。RDB でいうところの VIEW、というよりもリポジトリの unionfs と考えたほうがとらえやすいかな。

まず、手元の svk リポジトリはこうなっている。

 % svk ls //local
bridgesupport/
rubycocoa/
% svk info //mirror/bridgesupport
Depot Path: //mirror/bridgesupport
Revision: 45
Last Changed Rev.: 39
Mirrored From: http://svn.macosforge.org/repository/bridgesupport/trunk, Rev. 9
% svk info //mirror/rubycocoa
Depot Path: //mirror/rubycocoa
Revision: 45
Last Changed Rev.: 36
Mirrored From: https://rubycocoa.svn.sourceforge.net/svnroot/rubycocoa/trunk, Rev. 1727

で、現在設定されている svn:externals は次のとおり。

 % svn propget svn:externals https://rubycocoa.svn.sourceforge.net/svnroot/rubycocoa/trunk/src/misc
bridgesupport http://svn.macosforge.org/repository/bridgesupport/trunk

これと同じような svk のビューを作成したいわけ。svk help view にあるように、

ができることがわかる。

今回設定した内容は次のとおり。

 % svk propget svk:view:rbcocoa //local
&:/local
-*
. rubycocoa/src
misc/bridgesupport bridgesupport

これで

 % svk co //^local/rbcocoa rubycocoa

とチェックアウトして、意図したとおり misc/bridgesupport に BridgeSupport のコードが含まれいることを確認した。

だけれども、svk pull で変更をとってくることができない。ルートがミラーされてるディレクトりじゃないからかと考えて、もうひとつビューを作成。

 % svk propget svk:view:src-merged //local/rubycocoa
&:/local/rubycocoa
-*
. src
misc/bridgesupport //local/bridgesupport

これもだめ。単一のディレクトリを指してもダメだったので、現状では pull 自体が効かない感じ。merge はできるけど、sync が行われない。

結局、それぞれリポジトリをチェックアウトしてシンボリックリンクをはるという対処が今のところよさそう。多くの状況では、svn:externals により取り込みしたコードはいじらないのだからそれで十分か。