列出最近的mercurial哈希

时间:2017-07-05 06:17:27

标签: bash mercurial

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

相当于-lhg log参数的内容,以便我可以执行以下操作:

$ 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($0,length($0)-n+1)}'
1eb0c5a3002e
ec0db890a6c3
321c6693361e
4a1e2ca2df06
2d1ef7d57485

但这并不是很好:

  • 假设hg log如何输出(可能在不同版本中发生变化)
  • awk命令对我来说有点神秘:)
  • 不适用于Windows(假设您正试图解决其他问题以重击标签)

1 个答案:

答案 0 :(得分:4)

这就是你要记录的内容。根据您的需要模拟输出,例如

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

为您提供类似

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

结帐hg help template了解更多模板选项。您基本上可以将模板应用于生成这类输出的所有相关命令。

介意:如果您没有按提交日期显式排序日志,它将返回您的存储库中的10个最新提交 - 这不一定反映提交时间的顺序。你可以通过额外提供一个revset并按它排序来做到这一点:

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