如何修改gitstats以仅为其统计信息使用指定的文件扩展名?

时间:2011-01-13 23:49:55

标签: python

有问题的统计数据生成器的网站是:

http://gitstats.sourceforge.net/

可以从以下网址克隆其git存储库:

git clone git://repo.or.cz/gitstats.git

我想做的是:

./gitstatus --ext=".py" /input/foo /output/bar

如果没有经过大量修改就无法轻松传递上述选项,我只需要对要包含的文件扩展名进行硬编码。

但是,我不确定要修改的相关代码部分,即使我知道,我也不确定如何开始修改。

看起来它很简单,但唉......

2 个答案:

答案 0 :(得分:6)

今天我在寻找同样的事情时发现了这个问题。在阅读了sinelaw的回答之后,我查看了代码并最终分发了该项目。

https://github.com/ShawnMilo/GitStats

我添加了“exclude_extensions”配置选项。它不会影响输出的所有部分,但它会到达那里。

一旦我完全理解了git输出所做的一切,我最终可能会进行相当广泛的重写。原始项目几乎就在四年前的今天开始,由于标准库和Python语言的许多更新,可以进行大量的清理工作。

答案 1 :(得分:3)

编辑:显然,即使是上面的解决方案,也只会影响“文件”统计页面,这一点并不重要。我正在努力寻找更好的东西。我们需要解决的问题是254,这个:

    lines = getpipeoutput(['git rev-list --pretty=format:"%%at %%ai %%aN <%%aE>" %s' % getcommitrange('HEAD'), 'grep -v ^commit']).split('\n')

以前的尝试是:

不幸的是,似乎git没有提供在提交中轻松过滤文件的选项(在git log和git rev-list中)。此解决方案并不真正过滤某些文件类型的所有统计信息(例如标记上的统计信息),但是对于按行数更改计算活动的部分也是如此。

所以我能想到的最好的是gitstats的第499行(主要脚本):

res = int(getpipeoutput(['git ls-tree -r --name-only "%s"' % rev, 'wc -l']).split('\n')[0])

您可以通过在命令中向grep添加管道来更改它,如下所示:

res = int(getpipeoutput(['git ls-tree -r --name-only "%s"' % rev, 'grep \\.py$', 'wc -l']).split('\n')[0])

或者,您可以拆分'wc -l'部分,将git ls-tree的输出转换为字符串列表,并使用fnmatch模块过滤生成的文件名(然后计算每行中的行数)文件,可能通过使用'wc -l'),但这听起来像你试图解决的具体问题有点过分。

仍然没有解决问题(其余的统计数据会忽略此过滤器),但希望有用。