2011-07-13 247 views
1

,所以我需要解析这样的事:解析的git - 日志文件与Python

commit e397a6e988c05d6fd87ae904303ec0e17f4d79a2 
Author: Name <[email protected]> 
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) 

但我想的名字,插入元组和delitions的列表,一个常规-表达。

我tryed做财产以后像

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

但它没有返回值...

那么,什么是我的错?正则表达式应该是什么样子?

UPADTE: WRAR是正确的,但不知何故,当我读文件,并尝试分析它,我得到整个文件的名称,然后最后的插入和删除,所以它整个文件相匹配,但不是一个单一的承诺... [。+]获取整个文件,但不是提交的一部分...

回答

3

如果您有权访问回购站而不是git log的某些文本转储,请保存解析故障并生成不同的日志输出:

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

会产生以下形式的输出:

作者名称

lines_inserted lines_deleted modified_file

,你甚至都不需要的正则表达式。如果你想保持正则表达式,你需要在插入后匹配(+),否则它将根本不匹配,也不会捕获数字。

3

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

0

所以回答我的问题是:

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

但是对于你的答案无论如何感谢。