去年公司要求开始统计svn上面的代码量,当时使用了statsvn,感觉使用它统计 操作有点复杂,并且有时明明同事有提交代码,看统计结果却未显示(或许也是我自己操作的问题??),于是决定自己写一个可以统计svn代码量的方法。
一、统计的思路
我这边的svn上是有多个分支(不同项目),于是我设想,通过svn命令,获取总路径下的多个项目分支的各自的地址,然后针对每个项目分支,再使用svn命令统计指定日期内的代码提交情况,将提交内容进行整理,最后将各项目的每位同事的提交状况汇总一下(因为公司只需要统计每人每周提交svn的代码量(行数))。
二、使用到的svn命令整理:
1、查看路径下的目录列表
svn list svn://路径
2、查看指定日期内,该路径下的提交记录
svn log -r {日期1}:{日期2} svn://路径
注意:这个命令在实际使用时发现,得到的信息并不准确,有时得到的是相近日期的提交记录,而非指定日期内的提交记录(所以代码中统计时,我加了段代码去校验下得到的提交记录的日期)
注意:此处得到每个提交记录的提交人
3、查看历史提交记录,得到此前的版本号
svn log -l 个数 svn://路径
注意:去获取版本号原因是,因为此处公司svn内相邻版本号可能修改的不是同一项目的代码,故此前去获取该项目的此前的版本号
4、比较差异
svn diff -r 当前版本:此前版本 svn://路径
注意:此处就得到了实际的更改内容,对得到的信息进行下整理(我这里因为只需要统计行数,所以整理起来还算简单)
还有很多没用到的svn命令,都挺好玩的。
三、写代码
这里就简单啦,我用的java,用java执行cmd指令的方法来执行svn命令就行。中间因为项目挺多,用下线程会快一些。
四、封装(有点失败)
我用swing写了下界面,用eclipse打包成jar,再用exe4j把jar变成exe,打开效果如下图,相当简陋了,不过使用的时候,直接打开exe,输入下日期,点击统计,就可以啦。
不过我的“代码量统计.exe”,只在我自己电脑上可用,在同事电脑上测试下就会卡死……
去年写的程序,今年封装的,然后到现在还没找到原因,哭辽_(:з」∠)_
生成的报错日志内容如下:
java.io.IOException: Cannot run program "svn": CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at util.CMD.exeCmd(CMD.java:14)
at service.GetPList.getPList(GetPList.java:30)
at service.GetPList.codeStat(GetPList.java:130)
at controller.Data.codeStat(CodeStat.java:214)
at controller.CodeStat$1$1.run(CodeStat.java:183)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 10 more
java.io.IOException: Cannot run program "svn": CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at util.CMD.exeCmd(CMD.java:14)
at service.GetPList.getVListByDate(GetPList.java:48)
at service.GetPList.codeStat(GetPList.java:133)
at controller.Data.codeStat(CodeStat.java:214)
at controller.CodeStat$1$1.run(CodeStat.java:183)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 10 more
如果有哪位有什么想法或者建议,求指点