便利且有趣的 Shortlog

作者:Steve Losh
日期:2009-10-07

通过添加一个 hg shortlog 别名命令会让你做到许多很棒的事情。

许多 Mercurial 命令都可以通过 --template 选项来自定义输出内容。你可以使用 hg help templating 对你能够使用模板干哪些事情做一个深入的了解。

在本贴士中,我们将会使用到一个非常小巧但却是异常强大的模板。

Shortlog 模板

让我门先来看看一个非常简单的模板示例,用于 hg log

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

这个命令将会输出代码库中所有变更集的记录,每行一条,并且每一行包括版本号、哈希值以及摘要。看起来像是这样:

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 来输出一个非常简洁的记录了。不过我们这还没有结束呢。

计数

这个模板有一处非常特别的地方: 每条记录项占据一行 。这意味着我们可以使用UNIX 的 wc (worldcount) 工具来计算行数,并由此得出变更集的多少。

例如,我们可以计算代码库中的变更集数目:

$ 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

计算过去三天提交的变更数目:

hg slog --date -3 | wc -l

计算自2月1号以来提交的变更数目:

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

计算字三月以来 Steve 提交的非合并变更数目:

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

使用像这样的模板 (每行一个变更集) 可以方便的计数任何你能使用 hg log 过滤而得到的项目。试试 hg help log 了解更多的过滤方法。