使用python解析git - 日志文件

时间:2011-07-13 17:30:37

标签: python regex git git-log

所以我需要解析这样的事情:

commit e397a6e988c05d6fd87ae904303ec0e17f4d79a2
Author: Name <email@email.com>
Date:   Sat Jul 9 21:29:10 2011 +0400

    commit message

 1 files changed, 21 insertions(+), 11 deletions(-)

并获取作者姓名和插入和删除的数量。

我的名字是:

re.findall(r"Author: (.+) <",gitLog)

对于我有这个数字:

re.findall(r" (\d+) insertions\S+, (\d+) deletions",gitLog)

但是我希望得到一个带有一个正则表达式的名称,插入和延迟元组的列表。

我试着做像

这样的事情
re.findall(r"Author: (.+) <.+ (\d+) insertions\S+, (\d+) deletions",gitLog,re.DOTALL)

但它什么都不返回......

那我的错是什么?正则表达式应该如何?

UPADTE: wRAR是对的,但不知何故,当我读取i文件并尝试解析它时,我将整个文件作为名称,然后最后插入和删除,因此它匹配整个文件但不是单个提交... [。+]获取整个文件,但不是提交的一部分......

4 个答案:

答案 0 :(得分:3)

如果您有权访问repo而不是git log的某些文本转储,请自行解决解析问题并生成不同的日志输出:

git log --pretty="%an" --numstat

将产生以下形式的输出:

  

作者姓名

     

lines_inserted lines_deleted modified_file

你甚至不需要正则表达式。如果你想继续使用正则表达式,你需要在插入后匹配(+),否则它根本不匹配而不捕获数字。

答案 1 :(得分:3)

您应该使用(直接或通过借用代码)现有的软件包,例如GitPython,但是关于您的正则表达式问题,提供的文本的提供的正则表达式返回[('Name', '21', '11')],所以我认为它是正确的。

答案 2 :(得分:1)

有一个我用来用Python解析Git日志的模块。看起来很活泼:

https://github.com/gaborantal/git-log-parser

答案 3 :(得分:0)

所以我的问题的答案是:

re.findall(r"Author: (\S+) <.+\n.+\n\n.+\n\n.+ (\d+) insertions\S+, (\d+) deletions",gitLog)

但无论如何,谢谢你的答案。