hg log:如何获取特定用户的最新提交?

3

我有一个包含多个用户的代码库。我需要编写一个Python脚本来检索特定用户的最新提交记录。如何使用Mercurial实现这一目标?

我的想法是通过Python的subprocess调用来调用hg log命令。问题在于,我应该如何调用hg log命令,以便告诉我一个用户的最新日志。


对你来说,“最新提交”是什么意思? - Mike Sherrill 'Cat Recall'
2个回答

11

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

  • hg log -u 用户名

或者(使用revsets)

  • hg log -r "author(用户名)"

增加了价值

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


也许在答案中添加 hg help loghg help revsetshg help templates 的链接会更好。 - Tim Delaney
1
另外,也许可以在示例中添加-l选项(或limit()/last() revset函数)。 - Tim Delaney

1
我认为您可以通过调用系统调用来获取单个用户的最新提交,类似于以下命令行版本。
$ hg log -u your-user-name | head -5

head -5 命令会为最新的 changeset,也就是你的用户名下的 changeset,提供整个缩略版 hg log 输出,包括五行内容:changeset、tag、user、date 和 summary。如果只需要 changeset,可以使用以下命令(同样适用于命令行版本)。

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

评论指出这对输出格式做出了不必要的假设。我同意。


根据评论,这似乎是获取用户最后一次提交的最佳表达式。
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)"

管道是个坏主意(商标)。在一次日志调用中,模板和日志选项可以更好地完成工作。 - Lazy Badger
而且,只有在重新定义为“:”FS时,awk才能正确打印csrt-hash。 - Lazy Badger
正如评论所述,使用日志选项可以更高效、更安全地完成您使用管道完成的所有操作。请阅读hg help loghg help revsetshg help templates - Tim Delaney
这些引用如何帮助从特定用户仅返回最新提交并不是显而易见的。如果您发布这样的答案,我将非常乐意点赞。使用python的pipes.quote()或shlex模块是否未正确处理安全问题? - Mike Sherrill 'Cat Recall'
看看Lazy Badger在这个问题上的回答和我的第二条评论。安全问题是,更改集的文本格式中的行数取决于许多因素 - 任何标签、书签、父级数量等。它不仅仅是5行。它可能只有4行,也可能没有上限。 - Tim Delaney
啊,这样更有帮助了。但是我写的并不是不安全的;不安全是指通过像ps aux这样的方式暴露敏感信息,或者像蟑螂一样侵入文件系统,或者打开安全漏洞的东西。而写的则是对输出格式做出了不必要的假设。 - Mike Sherrill 'Cat Recall'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接