如何使用 StatSVN

统计 SVN 提交记录。

最近,因为不可描述的原因,抄了两天自己的代码,手都要码断了。感觉自己码了上万行,不计其数的字符。为了看看最终的记录是多少,于是有了这篇为了获取 SVN 统计数据的 StatSVN 工具使用说明。

StatSVN 是什么

StatSVN 是一款开源的从 SVN (Apache Subversion) 存储库中检索信息,并生成描述项目开发的各种表格和图表的统计数据。

包括:

  • 每个提交人员的统计数据
  • 每次提交的统计数据
  • 项目代码行的变化
  • 文件统计(文件修改版本统计,文件行数统计,不同文件类型统计)
  • 目录大小

截止目前,最后一个 Release 版本:2010-01-01: release of 0.7.0 is released

如何使用

因为 StatSVN 是开源的且托管在 SourceForge,所以可以很轻易的从 SourceForge 获取 StatSVN 的最新 Release 版本 和 源码 自己编译。

先决条件

  • Java: 1.4 或更高版本
  • Subversion command-line client: SVN 的命令行客户端,1.3 或更高版本

操作步骤

  1. checkout 需要统计的项目
  2. 导出一个该项目的日志文件
  3. 运行 StatSVN 即可

checkout 项目

如果本地已经 checkout 下来的项目,可以忽略该步。

因为 StatSVN 需要在该项目目录下运行,需要使用 svn diff 等命令,所以实际只是需要项目的 URL。

故,可以使用以下命令,checkout 一个空内容的项目文件夹,专门用来生成统计数据。

1
$ svn co --depth empty svn://server/repo/trunk/project

生成 SVN 日志文件

StatSVN 需要一个 SVN 的日志文件,来标示一段时间的 SVN 的每次提交信息,用于获取文件的变更记录。运行时,基于该日志文件,使用 svn diff 等命令,统计日志文件包含的时间段内的记录。

1
2
3
4
5
6
7
8
$ cd project

// 获取所有提交记录
$ svn log -v --xml > logfile.log
// 获取一段时间内的提交记录
$ svn log -v --xml -r {2018-12-19}:{2018-10-09} > logfile.log
// 获取版本段内的提交记录
$ svn log -v --xml -r 2299:2301 > logfile.log

注:因为需要每个版本修改文件的信息,所以 -v 不能少。不然不能运行。

运行 StatSVN

  1. Copy StatSVN.jar./project 目录下,使用以下命令运行

    1
    $ java -jar statsvn.jar logfile.log -output-dir ./report
  2. 指定目录运行

    1
    $ java -jar /path/to/statsvn.jar /path/to/module/logfile.log /path/to/module
    • -charset gbk,字符集
    • -disable-twitter-button,停用 Twitter 按钮
    • -output-dir ./report,输出目录
    • -include,需要统计的目录或文件(正则表达式)
    • -exclude,不需要统计的目录或文件(正则表达式)
  3. 运行完成后,使用浏览器打开./report中的index.html即可查看

运行时错误

Subversion binary is incorrect version. Found: 1.10.0, required: 1.3.0 Updating

造成该问题的原因在于 SvnStartupUtils#checkSvnVersionSufficient() 中的判断语句问题

1
if (versionString.compareTo(SVN_MINIMUM_VERSION) >= 0)

通过修改该判断,重新编译后运行。

参考 BUG#108BUG#109

注:

  1. 如使用 BUG#109 的方式
    1. 需要下载 maven-artifact 放到 ./statsvn-code/statsvn/lib 目录下
    2. 修改./statsvn-code/statsvn/.classpath,增加一行 <classpathentry kind="lib" path="lib/maven-artifact-3.5.4.jar"/>
    3. 修改./statsvn-code/statsvn/build.xml<target name="dist" depends="compile,copyfiles"> 标签部分中的 Class-Path 属性,如 <attribute name="Class-Path" value="svnkit.jar jna.jar maven-artifact-3.5.4.jar" />
    4. maven-artifact-3.5.4.jar 放到与 statsvn.jar 同目录下即可

源码

访问 SourceForge StatSVN,获取源码。

编译

该项目使用 Apache Ant 编译,使用如下命令

1
2
3
4
// 生成 ./statsvn-code/statsvn/dist/statsvn.jar
$ sh ant -buildfile ./statsvn-code/statsvn/build.xml dist
// 生成 statsvn.jar,发布文件,javadoc等
$ sh ant -buildfile ./statsvn-code/statsvn/build.xml release

其余可用命令查看 ./statsvn-code/statsvn/build.xml

总结

使用该工具可以很快速的统计出整个项目的代码开发情况,可以将当前 SVN 库的状态用图表的方式展现,直观方便。但是 StatSVN 统计的是所有的行,包括注释和空行,不仅是有效代码行,且不计算修改的代码行,只计算新增或删除的代码行数,比较局限。在我看来,仅有纪念意义,无其它的实际意义。要考察代码质量,推荐使用 SonarQube 等工具。

参考文献