彷徨えるフジワラ

年がら年中さまよってます

TortoiseHg 利用者は revset 指定を積極的に活用すべき

まぁ、僕自身が去年の年末まで、revset は殆ど使っていなかったので、あまり偉そうなことは言えた身分ではないのだけれど(笑)。

TortoiseHg で『リビジョンセットやブランチで履歴をフィルター』ボタンを押すと、条件入力欄(『### revision set query ###』)が表示される。『リビジョンセットやブランチで履歴をフィルター』ボタンも『検索』ボタンも、共に虫眼鏡をモチーフに使用しているので、間違わないように!

この入力欄に様々な条件を revset 記述で入力して、虫眼鏡アイコンクリックで検索を適用すると、一覧表示対象の履歴が順次絞り込まれていく。例えば、上記の初期状態に対して、マージ対象リビジョンを除外する "not merge()" を入力すると:

もうちょっと複雑な、例えば『default ブランチにおける修正で、2.1 版に取り込まれた 2.0 版以降のもの』を抽出するような場合でも:

  • default ブランチ: "branch('default')"
  • 2.1 版に取り込まれた: "::tag('2.1')"
  • 2.0 版以降のもの: "tag('2.0')::"

先の『マージ対象リビジョン』に対する上記の論理積("and" 結合)になるわけで、これらを一度に入力しなくても、条件の断片を順次入力することで、データウェアハウスのディメンジョンブラウザよろしく、対象リビジョンを徐々に絞り込んでいくことができる。
ブランチ名で "default" に限定して:

2.1 版以前の修正に限定:

※ 『2.0 版以降のもの』絞込みは、表示下限の設定なので、画面上は差が無い事から割愛。

実行効率的な事を考えるなら、後者2つは "tag('2.0')::tag('2.1')" に統合すべきなのだけれど、まぁ、今時の PC 性能なら、ローカルリポジトリ相手に履歴をブラウズする際に、この程度の記述差で、目に見えて実行効率が低下することも無いでしょう(多分)。

もちろんコマンドライン利用でも revset 機能は使用出来るのだけれど、TortoiseHg 経由であれば:

  • 以前の問い合わせ内容は(ブラウザの履歴情報みたいに)TortoiseHg が覚えておいてくれる
  • 抽出結果(一部)を見ながら、問い合わせ内容を適宜修正できる
  • 入力欄の横にある『…』ボタンを押すことで、revset 入力に特化したダイアログが表示される

などなどの利点があるので、TortoiseHg ユーザこそ revset 記述の恩恵を受けるべきだと思う。

revset 記述の詳細に関しては、オンラインヘルプ("hg help revset")や、そのHTML版を参照のこと。