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

时间:2015-12-24 18:15:19

标签: version-control mercurial hg-log mercurial-revsets

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

例如,简单的日志工作"正如所料"它显示最新的五个日志条目。

hg log -l5

但是,当使用revset时,结果首先是最旧的节点(如没有-l所示);因此,下面显示了最旧的五个条目,这是不希望的。

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

如果hg log可以指示按日期降序("正如预期的那样"),以便限制具有可预测性 1 并且有意义的效果?

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

1 我不考虑在rev 中预测可能会发出随机reverse次来电,但如果这是"最佳&# 34;方式..

2 个答案:

答案 0 :(得分:1)

你有几种选择。

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

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

作为简写,您还可以使用-f--follow,当与-r一起使用时,会将修订包装在reverse(...)中。例如:

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

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

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

请注意,revset别名可以避免必须反复输入revsets。所以,你可以在.hgrc

中加入这样的内容
[revsetalias]
lastby($1) = last(user($1), 5)

然后做:

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

答案 1 :(得分:0)

重要的附录答案:盲目地使用reverse执行此任务。虽然它在许多情况下都有效,但更好/更可靠的通用解决方案是使用sort,如:

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

这是因为reverse 不保证源集顺序是有序的 - 因此它仍然可能导致满足的最终输出要求的“最新”标准。

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

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