今天接到一个小任务,要求把项目组最近三个月(10,11,12),所有修改过的文件的代码行数统计出来。
代码行数统计的工具已经有了,唯一需要的就是要把哪些文件是在这段特定的时间内修改过的,统计出来。
简单的试操作了一下,要找到哪些文件在这个时间段内修改过,估计就必须检查每一个文件的history了。
这么多的文件,算是一个很费劲的活了。
不过考虑到这个任务的精度要求不高,而且时间是最近的三个月内。
现在也只是刚刚多过了几天而已,在这段时间内,项目组修改的代码很少。
所以考虑取到所有的代码,并且取得的时候按照最后更新的日期取得,然后把最后修改时间不在这段时间内的文件删除,剩下的文件就是我要的文件,用代码统计工具统计一把,数据就有了。
按照这个思路操作,考虑了两种方法。
一种是手动操作,使用vss客户端获取代码,然后直接在操作系统上把所有的文件按照搜索的方式列出来,再按照日期排序,把之前和之后的文件都删掉就行。
下图就是vss的"get Latest Version"的窗口,只要的Set file的地方选择Modification就可以使取得的文件是最后cin的日期,否则就会是当前日期了。
第二种是写点代码实现。我这次选择了ant,好久不用,权当练练手好了。
先写一个获取代码的target,一定要添加属性filetimestamp = "modified" 。
- < target name = "getSource" >
- < delete dir = "${local.src.dir}" />
- < vssget localPath = "${local.src.dir}"
- serverPath = "${vss.serverPath.dir}"
- ssdir = "${vss.executable.dir}"
- recursive = "true"
- login = "${vss.username},${vss.password}"
- vsspath = "${bundle.vss.path}"
- filetimestamp = "modified" />
- </ target >
再写一个删除特定日期的文件的target,这回使用到了selector date。
- < target name = "delFile" depends = "" description = "--> description" >
- < delete >
- < fileset dir = "${local.src.dir}" >
- < or >
- < date when = "before" datetime = "2008/09/30 23:59:59" pattern = "yyyy/MM/dd HH:mm:ss" />
- < date when = "after" datetime = "2008/12/31 23:59:59" pattern = "yyyy/MM/dd HH:mm:ss" />
- </ or >
- </ fileset >
- </ delete >
- </ target >
写完了,一执行,获取一下代码。
然后再把代码统计工具加到build文件中一执行就OK了。
参考:
ant官方手册:http://ant.apache.org/manual/index.html
selector date的说明:http://ant.apache.org/manual/CoreTypes/selectors.html#dateselect
vss相关ant task的说明:http://ant.apache.org/manual/OptionalTasks/vss.html