特別なブックマーク bookmark('@') #mercurialjp

このエントリは Mercuiral Advent Calendar 2012 の21日目です。

id:flying-foozy さんからアンドキュメンテッドなMercurialの仕様を教えていただいたのでそのことをネタにします。

bookmark('@')

最近Mercurialのリポジトリブックマークが付きました。 bookmark('@') 君。Mercurialリポジトリのブックマークを見てみると、この@マークのブックマークしか存在しないので、いかにも特別こんな感じがします。

で、実際に特別な存在なんです。それはcloneしてみるとわかります。

% hg clone http://selenic.com/repo/hg
複製先ディレクトリ: hg
全リビジョンを取得中
リビジョンを追加中
マニフェストを追加中
ファイルの変更を追加中
18095 個のリビジョン(35296 の変更を 2179 ファイルに適用)を追加
ブランチ default へ更新中
ファイルの更新数 998、 マージ数 0、 削除数 0、 衝突未解消数 0

クローンしたリポジトリのリビジョンを調べてみましょう。

% cd hg
% hg log -r .
チェンジセット:   17980:83aa4359c49f
ブックマーク:     @
親:               17978:55b367bff8d2
親:               17979:b3ec0b5fd777
ユーザ:           Matt Mackall <mpm@selenic.com>
日付:             Wed Nov 28 16:15:05 2012 -0600
要約:             merge with stable

% hg tip
チェンジセット:   18094:8ceabb34f1cb
タグ:             tip
ユーザ:           Adrian Buehlmann <adrian@cadifra.com>
日付:             Wed Dec 19 10:02:43 2012 +0100
要約:             test-pathencode: compare current pathencoding implementations

%

これでわかりましたね!

clone時にリビジョンを指定しない場合のデフォルトのリビジョン

次の順番で見つかったものにupdateします。

1. bookmark('@')
2. branch('default')
3. tag('tip')

実装はhg.pyの該当箇所を参考にしてみてください。

bookmark('@') の使い方

defaultブランチの最新リビジョン以外を参照させたい場合に利用できます。たとえば次のようなことができます。

  • 最新の安定板のタグが付いたリビジョンに@を付けることで、clone時に安定したバージョンを見せることができる。

いろいろ応用方法があると思います。見つけたら#mercurialjpでつぶやいたり、Blogにまとめてみてください。