名前付きブランチ全体の差分取得と revset 利用
revset 機能が導入される以前であれば:
名前付きブランチにおける、分岐時点から最新までの総差分
みたいなものを参照しようとした場合:
- "
hg log -b ブランチ名 --template '{rev}\n'| tail -n 1
" などで、最初の分岐リビジョン(BRANCHING)を取得 - "
hg parents BRANCHING
" で分岐リビジョンの親リビジョン(BASE)を取得 - "
hg diff -r BASE -r ブランチ名
" で差分を取得
といった手順が必要だったので、自分の書籍では:
名前付きブランチの作成の際には、分岐元リビジョンへのタグ付けを、ブランチの最初のリビジョンにするのがお勧め
としてあるのだけれど、revset を使えば:
- 当該ブランチのリビジョン: "
branch(ブランチ名)
" - 且つリビジョン番号が最小(= 分岐リビジョン): "
min(branch(ブランチ名))
" - 且つ第1親: "
min(branch(ブランチ名)) ^ 1
"
という記述で分岐元リビジョンが導出できるので、以下のコマンド実行で差分が取得できる。
$ hg diff -r "min(branch(ブランチ名)) ^ 1" -r ブランチ名
とはいえ、内部的には高速化に関する配慮が色々とされているけれど、revset での絞り込みは決して安価な処理ではないので、履歴が膨大な場合には当然実行性能的な問題が生じ得る: 例えば『当該ブランチの最小リビジョン』導出は、履歴の全走査が必要。
まぁ、今時の個人が使用する端末の性能を考えると、先のエントリで書いたように『この程度の記述差で、目に見えて実行効率が低下することも無い』筈ではあるのだけれど、そういった状況への配慮が必要な場合であれば、『分岐元リビジョンへのタグ付け』は依然として有効な筈。