【问题标题】:hg log: how to get latest commit by a particular user?hg log:如何获取特定用户的最新提交?
【发布时间】:2013-03-28 21:16:20
【问题描述】:

我有一个包含多个用户的存储库。我需要制作一个 python 脚本来检索特定用户的最新提交。如何使用 mercurial 做到这一点?

我正在考虑通过 Python 的 subprocess 调用来调用 hg log 命令。问题是我应该如何调用hg log 命令以便它告诉我用户的最新日志。

【问题讨论】:

  • “最新提交”对您意味着什么?

标签: python mercurial commit


【解决方案1】:

我认为您应该能够通过使用系统调用调用类似的东西来获取单个用户的最新提交。 (命令行版本如下。)

$ hg log -u your-user-name | head -5

head -5 为您的用户名的最新变更集提供完整的缩写 hg log 输出,其中包括五行:变更集、标记、用户、日期和摘要。如果你只想要变更集,你可以使用这些方面的东西。 (还是命令行版本。)

$ hg log -u mike@fontling.com | head -1 | awk '{print $2}'

评论表明这对输出格式做出了毫无根据的假设。我同意。


基于 cmets,这似乎是获取用户最后一次提交的最佳表达式。

hg log -r "last(author('email@domain.com'))" 
hg log -r "last(author('Fred Flintstone'))"

获取最后三个 . . .

hg log -r "last(author('email@domain.com'), 3)" 
hg log -r "last(author('Fred Flintstone'), 3)"

【讨论】:

  • 管道是个坏主意 (tm)。模板和日志选项在一次调用日志中做得更好
  • 和 awk 将正确打印 csrt-hash only 并重新定义为 ":" FS
  • 如前所述,您对管道所做的一切都可以使用日志选项更有效、更安全地完成。请阅读hg help loghg help revsetshg help templates
  • 这些引用如何帮助仅返回特定用户的最新提交并不是很明显。如果您发布一个可以做到这一点的答案,我会非常乐意支持它。 pytyhon 的 pipe.quote() 或 shlex 模块是否没有正确处理安全问题?
  • 看看 Lazy Badger 对这个问题的回答以及我在那里的第二条评论。安全问题是变更集的文本格式中的行数取决于许多因素——任何标签、书签、父对象的数量等。它不仅仅是 5 行。它可能只有 4 个,并且没有上限。
【解决方案2】:

简单(但不是高效或优雅的方式)

  • hg log -u USERNAME

或(带修订)

  • hg log -r "author(USERNAME)"

有附加价值

如果字符串以“re:”开头,则字符串的其余部分被视为正则表达式。要匹配实际包含“re:”的用户,请使用前缀“literal:”。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 2021-03-10
  • 2011-10-13
  • 2014-07-02
  • 2012-01-01
  • 2022-01-12
  • 2014-05-03
  • 1970-01-01
相关资源
最近更新 更多