意外と便利、 shortlog

posted by Steve Losh on October 7, 2009

出力系の Mercurial のコマンドは、たいてい --template オプションでカスタマイズできます。テンプレートでできることについて、 細かい話は hg help templating をご覧ください。

この Tip では、とても小さなテンプレートを使います。 こいつはとっても強力です。

shortlog テンプレート

ごく簡単なテンプレートの例がこれです。 hg log で使います:

hg log --template '{rev}:{node|short} {desc|firstline}\n'

このコマンドはリポジトリ内のチェンジセットについて、全ログを表示します。 ログは 1 行に 1 つで、各行にリビジョン番号、ハッシュ値、要約があります。 出力はこのようになります:

81:966ff708eb3a Add the Shortcuts for Specifying Revisions beginner tip.
80:3dca217e76a2 Change the title to something better.
79:4edca6026448 Change the title to something more description.
78:bea31254eba5 Add the Graphlog beginner tip.
77:5ef6bf0c5081 Add scrollbars to code blocks if needed.
76:dd1fa17eaa1f Reduce the number of tips on the front page to 4 per category.
75:f3d5a6d9d5a5 Fix the nested <p> tag issue.
74:e6a76edf8032 Add the Creating Repositories Over SSH advanced tip.
73:a4f1c617f01f Reword "N.B." to "Note" because it looks better before the colon.
72:e44939482007 Mention the feature requirement for HTTP User Auth.
... さらに続く ...

このコマンドは、リポジトリに何が起こったのかざっと見るのに便利です。 さぁ、 ~/.hgrc ファイルを編集して このコマンドのエイリアスを追加しよう!

[alias]
slog = log --template '{rev}:{node|short} {desc|firstline}\n'

よし、これで hg slog コマンドで簡潔なログを表示できるようになりました。 まだ終わりじゃないけどね。

数える

このテンプレートのどこが特別なのか … それは、 1 行に 1 ログだということ です。つまり、 UNIXwc (word count) ツールで行数を数えられて、 その結果としてチェンジセットの数が分かるのです。

例えば、リポジトリ内のチェンジセット数はこのようにして数えられます:

$ hg slog | wc -l
  82

正直なところ、この例は大して役に立ちません。 最新のチェンジセットのリビジョン番号を見ればいいだけですから。しかし、ここからが肝心です。 hg log のフィルタリングオプションを使えば、ある条件のチェンジセットについて数えられるのです。

マージ回数:

hg slog --only-merges | wc -l

マージ以外のコミット回数:

hg slog --no-merges | wc -l

Steve’ のコミット回数:

hg slog --user Steve | wc -l

過去 3 日間のコミット回数:

hg slog --date -3 | wc -l

2 月 1 日以降のコミット回数:

hg slog --date '>Feb 1' | wc -l

3 月以降に Steve が作業したマージ以外のコミット回数:

hg slog --no-merges --user Steve --date '>Mar 1' | wc -l

この手の(1 行 1 チェンジセットの)テンプレートを使えば、 hg log コマンドでフィルター可能なコトは何でもパッと数えられるようになります。 フィルター機能について詳しくは hg help log をチェックしてください。

hg shortlog エイリアスを追加して、匠のコマンドライフを。