【问题标题】:Counting changed lines of code over time in a repository计算存储库中随时间变化的代码行数
【发布时间】:2010-06-16 19:45:08
【问题描述】:

有没有办法在 mercurial 存储库中获取特定时间段内更改的代码行数?类似于 statsvn 所做的事情会很棒,但是任何计算 6 个月内更改的代码行数的事情都会做(包括对 hg log 参数的巧妙组合)。

【问题讨论】:

标签: mercurial


【解决方案1】:

hg churn extension 是您想要的。

您可以使用hg activityhg chart 获得可视化结果。

【讨论】:

    【解决方案2】:

    编辑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 进行了测试。

    【讨论】:

    • 不要使用 hg log 命令。这还包括两个提交 ID 之间的线性存储库中的所有更改,包括未在当前分支中提交的提交。
    【解决方案3】:

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

    最后,我发现最适合我的是 CLOC(Count Lines of Code):http://cloc.sourceforge.net/

    您可以给它两个文件夹,其中包含一个项目的两个版本,它会计算所有相同、修改、添加、删除的行。它可以识别多种语言并逐项列出代码、cmets 和空行。

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

    【讨论】:

    • 这是解决“问题”的好方法,因为您只需下载一个 Perl 文件。注意语法是:./cloc.pl --ignore-whitespace --ignore-case --diff <dir a> <dir b>
    • 它不如 git diff --shortstat 快,但它在查找已复制的重复代码方面做得更好。
    猜你喜欢
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2013-01-30
    • 2012-08-06
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多