纯新增代码,如:
+void foo() {
+ ... ...
+}
纯删除代码,如:
-void foo() {
- ... ...
-}
修改的代码,如:
-void foo(void);
+void foo(int);
我们所要统计的所谓有效代码更多是指纯新增的代码和修改的代码,纯删除的代码可忽略不计。这样一来实际有效代码行数 = 纯新增代码行数 + 修改代码行数;而修改的代码在svn diff结果中体现为一减一加,实际修改行数是等于其+的行数的。也就是说有效代码行数就是svn diff结果中所有前缀为+的行的行数。svn diff输出格式相对规整,通过解析得到这个行数并非难事。最简单的方法就是使用Shell脚本 了。
脚本全部内容这里就不列出来了,这里 可以下载。其核心代码只有以下两行:
svn diff -r$start_revision:$end_revision $target $USERNAME $PASSWD > $TEMPFILE
add_lines_count=`grep "^+" $TEMPFILE|grep -v "^+++"|sed 's/^.//'|sed '/^$/d'|wc -l`
首先我们使用svn diff命令将两个修订号之间的差异重定向到一个临时文件中,然后使用grep、sed和wc的组合完成行数的计算:其中首先过滤出以+开头的行,但去除其中+++开头的行,得到的是所有只以一个+开头的行。再利用set 's/^.//'删除每行行首的那个+,用set '/^$/d'删除所有空行,最后利用wc -l计算总行数。
也就是说通过上面脚本运行后得到的有效代码行数是不包括空行的,但是包含注释代码。