mercurialで一意なrevision番号を得る¶
この記事は Mercurial Advent Calendar 2012 の13日目です。
「mercurialで"このリビジョン"というものを人に伝えたい」という要望が ありました。
mercurialではすべてのリビジョンには番号がついています。
チェンジセット: 3814:7ba6a6497694
タグ: tip
ユーザ: Jon Waltman <jonathan.waltman@gmail.com>
日付: Tue Dec 04 21:10:15 2012 -0600
要約: Add Docutils-native XML and pseudo-XML builders
この例では3814ですね。
ですが、これはあくまで「手元のレポジトリ」のリビジョン番号であり、実際 には一意ではなく、他のレポジトリだと異なっている場合があります。
一意なものはその後の 7ba6a6497694 というハッシュです。正確にはこれも一 部分だけで
% hg log -r tip --template "{node}"
7ba6a64976948c034bcd21dd6d85a050202320f1
と出てくる、40桁のハッシュが一意なリビジョン識別子となってます。
普通覚えられませんよね。
でも欲しいんだもん!¶
タグを使用することで、擬似的にリビジョン番号を設定できます。
こう打ってみてください。
% hg log -r tip --template '{latesttag}.{latesttagdistance}'
1.1.3.108
というように表示されます。 これは、
tip(最新のリビジョン) の 1.1.3 という最新のタグと 108 という最新のタグからの距離(リビジョン数)
の組み合わせです。 これでリビジョンを一意に指定できると思います。 (ちなみに一度もタグを設定していないと null という文字列になります)
仮にrebaseなどでタグからの距離がずれたとしても、 再度タグを設定すればもう一度固定化されます。
また、いちいちコマンドを打つのはめんどうなのですが、 TortoiseHg2.4からカスタムツールというものが導入されました。 これはコマンドを自由に設定できるものです。
「ファイル」->「設定」 で右上の「ファイルを開く」を押し、 以下を貼りつけて、「保存」してください。
[tortoisehg-tools]
hgrevision.command = hg log -r {REV} --template
'{latesttag}.{latesttagdistance}'
hgrevision.enable = istrue
hgrevision.label = revision
hgrevision.showoutput = True
hgrevision.tooltip = revision
その後TortoiseHgを再起動します。
以降は、任意のリビジョンを選択し、右クリックメニューの一番下の「ツール」 からrevisionを選択すれば、 下のコマンドログに表示されます。
例えばTortoiseHgでは
%(latesttag)s+%(latesttagdistance)s-%(node).12s
という形でバージョンをリビジョンごとにつけています。(setup.py参照)
まとめ¶
ということで、一意っぽいバージョン番号を分散レポジトリなmercurialでも 作成する方法を紹介しました。
参考¶
ここ を参考にしました。困ったときのstackoverflow!
Comments
comments powered by Disqus