mercurial で管理している Python のパッケージがある。
仮に hoge だとしよう。
あるとき、少し手の込んだ変更を試したい、と思い隣に clone して huga とした。
ところが、Python のパッケージ名としては依然として hoge を使いたいのである。
そこで、元々の hoge を hogehoge として、hoge は huga へのシンボリックリンクとした。
そんなとき、hoge のユーザーがパッチをくれた。
もちろん実体が huga である現在の hoge も元の hoge のクローンから派生しているのだからそこでマージすることはできる。
しかし、huga の変更が生きるかどうか判らないので、やはり元の hoge にパッチを当てて確認するのが筋だろう。
そこで、hoge のシンボリックリンクを hogehoge に張り替えた。
こんなことを繰り返すことになったとしよう。
そのうち、クローンも増え始める。
状況の細部を無視すると、していることは「複数バージョン」をシンボリックリンクで「切り替える」ことだ。
それはどこかで聞いたことがあるシナリオだ。
eselect だ。
Gentoo を使っていない人のために説明すると、eselect とは元々 gcc だの binutils だの emacs だのの複数バージョンをインストールして使い分けたい人のために用意されている機構である。
昔はそういう要望に各パッケージが適当に対応していたが、その内インターフェイスを統一しようということになって出てきたもの、だと思う。
ということで、hoge.eselect ファイルを作る。
Gentoo のツールらしく、eselect ファイルも基本的に bash スクリプトである。
/usr/share/eselect/modules にいくつかファイルがあるので、真似をすれば大して難しくない。
そして作った hoge.eselect を /usr/share/eselect/modules に置く。
と、こんな感じで使える。
% eselect hoge show
Current target of hoge:
huga
% eselect hoge list
Available hoge targets:
[1] hogehoge
[2] huga *
% eselect hoge set 1
Switching hoge to hogehoge ...
%
まとめ: dvcs のクローンリポジトリを eselect で切り替えることができる。
他の人はどうやってこういう切り替えを実現しているのだろう。
特に Gentoo 以外の人は
(多分似たような目的のツールがあるのだろうとは思うが)。
|