列出最近的 mercurial hashes

List most recent mercurial hashes

hg 是否有一种很好的方法来在不同的行中仅列出 repo 中最近提交的哈希值? hg id -i 只给我当前的提交。

等同于 hg log 中的 -l 参数,这样我就可以做类似的事情:

$ hg id -i -l 3
1eb0c5a3002e  <--- youngest commit
321c6693361e  <--- 2nd youngest commit
647724838c03  <--- 3rd youngest commit

为了提供一些上下文,我有一个 bash 脚本,我将一个 mercurial 哈希传递给它并构建一个 docker 图像,

./build_image.sh 647724838c03

我正在尝试获取散列参数的命令行补全,因此我需要一个命令来生成我可以放入的所有散列 compgen:

local HASHES=$(cd $REPO && hg id -i -l 10)
COMPREPLY=( $(compgen -W "$HASHES" -- $cur) )

大多数情况下,我想要构建的哈希将是签出的提交,因此 hg id -i 可以正常工作,但获得最后 10 个哈希的完整列表会很好!

在此先感谢您的帮助!


编辑

我使用 grepawk:

解决了这个问题
$ hg log -l 5 | grep changeset | awk -vn=12 '{print substr([=13=],length([=13=])-n+1)}'
1eb0c5a3002e
ec0db890a6c3
321c6693361e
4a1e2ca2df06
2d1ef7d57485

虽然这不是很好:

这就是您登录的目的。将输出模板化为您的需要,例如

hg log -l10 --template="{node|short} {date} {author}\n"

为您提供类似

的输出
0c4520bbf388 2017-06-07 12:25 +0200 username <user@example.com>

查看 hg help template 以获得更多模板选项。您基本上可以将模板应用于生成此类输出的所有相关命令。

注意:如果您没有按提交日期明确对日志进行排序,它将 return 您存储库中的 10 个最新提交 - 这不一定反映提交时间的顺序。您可以通过另外提供一个 revset 并按它排序来做到这一点:

hg log --rev="sort(date('<now'))" --template="{node}\n" -l5