指定 Revset 时如何使用 Hg Log 限制为 N 个最新条目?

How to limit to N newest entries with Hg Log when specifying a Revset?

这个问题不是 hg log - How to get the last 5 log entries? 的重复问题 - 应用限制很容易。问题是日志输出 受限时 似乎并不总是按日志日期降序排列 - 行为会随着 revset 的增加而改变。

例如,简单日志工作 "as expected",它显示 最新 五个日志条目。

hg log -l5

但是,当使用 revset 时,结果首先是 oldest 个节点(如没有 -l 时观察到的);因此下面显示了 oldest 五个不需要的条目。

hg log -r "user('Me')" -l5

hg log如何使用 revset 指示按日志日期 descending ("as expected") 排序,以便限制具有可预测的1和有意义的效果?


$ hg --version
Mercurial Distributed SCM (version 3.6.1)

1 我不考虑在可预测的 revset 中抛出随机 reverse 调用,但如果那是"best" 方式..

您有几个选择。

首先,您可以将 reverse() 与现有的 revset 结合使用,例如:

hg log -r 'reverse(user("me"))' -l 5

作为 shorthand,您还可以使用 -f--follow,当与 -r 一起使用时,它们会将修订包装在 reverse(...).示例:

hg log -f -r 'user("me")' -l 5

或者您可以在变更集中对限制进行编码,例如:

hg log -r 'last(user("me"), 5)'

请注意,revset 别名对于避免一遍又一遍地输入 revset 很有用。所以,你可以把这样的东西放在你的 .hgrc:

[revsetalias]
lastby() = last(user(), 5)

然后做:

hg log -r 'lastby("me")`

重要附录答案:不要盲目地使用reverse来完成这个任务。虽然它在许多情况下都有效,但 better/reliable 通用解决方案是使用 sort,如:

hg log -r 'sort(user("me"), "-date")' -l 5

这是因为 reverse 不保证源集顺序是 well-ordered - 因此它可能仍然会导致最终输出 满足'newest'.

的要求条件

上面 sort 的使用保证了行为,因为它按日期降序排序,然后选择每个 hg 日志限制选项的前 5 个。

(否则,请参阅 Reimer 的回答。)