随着时间的推移计算更改的代码行

时间:2010-06-16 19:45:08

标签: mercurial lines-of-code

是否有任何好的工具可以计算mercurial存储库中某段时间内更改的代码行数? statsvn中的某些内容会很棒,但是在6个月内计算更改代码行数的任何事情都会有效(包括hg log参数的巧妙组合)。感谢。

PS:请不要讨论测量这个数字的目的;)

3 个答案:

答案 0 :(得分:25)

hg churn extension就是你想要的。

您可以使用hg activityhg chart获得视觉效果。

答案 1 :(得分:14)

修改hg diffhg log都支持可以为您执行此操作的--stat选项,只会更好,更快。


我创建了一个名为lines的别名来为我计算更改的行(不一定是代码行)。尝试将此别名放在.hgrc文件中:

[alias]
lines = !echo `hg log -pr $@ | grep "^+" | wc -l` Additions; echo `hg log -pr $@ | grep "^-" | wc -l` Deletions; 

然后首先传递修订版,然后是任何可选参数:

hg lines tiphg lines 123:456 -u brian

有时您想知道更改的行数,不包括仅限空格的更改。这需要使用diff -w而不是log -p。我为此设置了linesw别名:

#ignore whitespace
linesw = ![[ $1 =~ : ]] && r=$1 || r="$1~1:$1"; echo `hg diff -wr $r | grep "^+\([^+]\|$\)" | wc -l` Additions; echo `hg diff -wr $r | grep "^-\([^-]\|$\)" | wc -l` Deletions; 

hg linesw tiphg lines 123:456

请注意,它们的行为略有不同,因为difflog的行为不同 - 例如,log将采用--user参数而diff则不会,当传递范围时,log将显示在范围内给出的第一个修订中提交的更改,而diff则不会。

这只是使用bash进行测试。

答案 2 :(得分:9)

我需要这样做,并且花了很多时间使用hg churn扩展和类似的解决方案。

最后,我发现对我来说最有效的是CLOC(代码行数):http://cloc.sourceforge.net/

您可以为它提供两个包含两个版本项目的文件夹,它将统计所有相同,修改,添加,删除的行。它识别多种语言并逐条列出代码,注释和空白行。

要使用它,我将我的代码的两个版本从Hg中拉出到两个并行文件夹中,然后使用cloc --diff --ignore-whitespace