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 により取り込みしたコードはいじらないのだからそれで十分か。
| 固定リンク
最近のコメント