• 统计SVN代码行数工具StatSVN


    主要参考了以下一些文章。

    文章1(主要参考):http://chenzhou123520.iteye.com/blog/1436653

    文章2:http://www.nc21.cn/ncnet/article.asp?nc=15-12-147-0-6735.xhtml

    我的主要操作步骤,

    1. 获取SVN log:svn log -v -r 17461:39224 --xml > logfile.log

    2. 用StatSVN分析:java -jar ~/project/statsvn-0.7.0/statsvn.jar logfile.log <Working Copy的目录 >

    没有用其他选项,导致所有文件都放在了当前目录,文章1中提到的下列参数应该有用。 

     -output-dir <dir> directory where HTML suite will be saved 

    -include <pattern> include only files matching pattern, e.g. **/*.c;**/*.h
    -exclude <pattern> exclude matching files, e.g. tests/**;docs/**

    我统计了1年的代码变动,svn log比较慢,StatSVN极其慢,花了约2个多小时才分析完大约 4500个revision。

    该程序是用svn diff命令来计算代码行数的,逐个revision计算比较前一个版本与该版本的变动代码行数,然后加总。只可能多统计,不可能少统计。

    文章1:

    StatSVN介绍

    StatSVN是一个Java写的开源代码统计程序,从statCVS移植而来,能够从Subversion版本库中取得信息,然后生成描述项目开发的各种表格和图表。比如:代码行数的时间线;针对每个开发者的代码行数;开发者的活跃程度;开发者最近所提交的;文件数量;平均文件大小;最大文件;哪个文件是修改最多次数的;目录大小;带有文件数量和代码行数的Repository tree。StatSVN当前版本能够生成一组包括表格与图表的静态HTML文档。

    StatSVN下载

    StartSVN官网地址为:http://www.statsvn.org/index.html 

    StartSVN的下载页面为:http://www.statsvn.org/downloads.html也可以下载本文的附件

    现在官网上最新的版本为:statsvn-0.7.0

    StatSVN使用

    使用须知

    StatSVN的运行需要Java的运行环境支持,所以大家需要安装Java的运行环境(Java RuntimeEnvironment)。JRE可以从Sun的网站上下载。

    Statsvn在使用中需要使用SVN的客户端,因此需要确保机器上可以访问到SVN的客户端命令

    Checkout工作拷贝

    首先从SVN仓库中checkout一个需要统计的路径(如果在工作目录下进行统计,首先请更新,保证工作区中的版本是最新的版本,确保统计结果的准确性),例如我把我的某个路径下的工程checkout在我的电脑上的 D:\MyProjects 路径下。

    生成svn log文件

    首先通过命令行进入工作目录:D:\MyProjects ,再使用svn log -v --xml > logfile.log的命令,其中logfile.log为log文件的名称,可以根据需要自行定义。这样就在工作拷贝的目录下生成一个名称为logfile.log的文件。

    调用StatSVN进行统计

    首先我们把从官网上下载的statsvn-0.7.0.zip包解压缩到D:\statsvn-0.7.0目录下

    通过命令行进入D:\statsvn-0.7.0目录

    调用命令java -jar statsvn.jar D:\MyProjects\logfile.log D:\MyProjects,命令运行成功即完成了统计工作。

    该命令的格式是java -jar statsvn.jar [options] <logfile> <checked-out-module>

    参数<logfile>为前一步中生成的svn log文件,<checked-out-module>为checkout工作拷贝目录,注意两个参数都要列出正确的全路径,否则会提示错误如logfile.log找不到等等。

    Java代码  
    1. <logfile>          path to the svn logfile of the module  
    2. <directory>        path to the directory of the checked out module  

    [options]为可选参数,该参数格式及用法如下:

    Java代码  
    1. Some options:  
    2. -version            print the version information and exit  
    3. -output-dir <dir>         directory where HTML suite will be saved  
    4. -include <pattern>        include only files matching pattern, e.g. **/*.c;**/*.h  
    5. -exclude <pattern>    exclude matching files, e.g. tests/**;docs/**  
    6. -tags <regexp>        show matching tags in lines of code chart, e.g. version-.*  
    7. -title <title>            Project title to be used in reports  
    8. -viewvc <url>         integrate with ViewVC installation at <url>  
    9. -trac <url>           integrate with Trac at <url>  
    10. -bugzilla <url>           integrate with Bugzilla installation at <url>  
    11. -username <svnusername> username to pass to svn  
    12. -password <svnpassword> password to pass to svn  
    13. -verbose            print extra progress information  
    14. -xdoc                   optional switch output to xdoc  
    15. -xml                    optional switch output to xml  
    16. -threads <int>            how many threads for svn diff (default: 25)  
    17. -concurrency-threshold <millisec> switch to concurrent svn diff if 1st call>threshol  
    18. -dump               dump the Repository content on console  
    19. -charset <charset>        specify the charset to use for html/xdoc  
    20. -tags-dir <directory>     optional, specifies the director for tags (default '/tags/')  
    21. Full options list: http://www.statsvn.org  
     

    查看统计结果

    上述命令运行成功后,可以看到在D:\MyProjects目录下生成一组包括表格与图表的静态HTML文档。可以用浏览器打开index.html查看统计结果。

    示例图片:

    StatSVN优缺点分析

    优点

    StatSVN会把当前SVN库的状态用图片和图表的方式展现出来,可以按不同分类分别展开,功能强大。

    缺点

    StatSVN统计的是所有代码行,包括注释和空行,但一般度量要求是有效代码行,在分析时需要注意这一点。

    StatSVN不考虑修改的代码行数,只考虑与上一版本相比新增(+)与删除(-)的代码行数。

    文章2:

    利用SVN log命令查看提交日志信息详解

     内容提示:本文将详细介绍通过SVN log命令查看提交日志信息的方法。

    log: 显示一组版本与/或文件的提交日志信息。

      用法:

    1、log [PATH]

    2、log URL[@REV] [PATH...]

    1、显示本地 PATH (默认: “.”) 的日志信息。默认的版本范围是 BASE:1。

    2、显示 URL 中 PATH (默认: “.”) 的日志信息。如果指定了 REV,就从 REV开始查找 URL,版本范围是 REV:1。否则就从 HEAD 开始查找 URL,版本范围是 HEAD:1。

     
     

    可以指定多个 “-c” 或 “-r” 选项 (但是不允许同时使用 “-c” 和 “-r” 选项),以及混合使用前向和后向范围。

    使用 -v 时,在日志信息中显示受影响的路径名。
    使用 -q 时,不显示日志信息主体 (请注意,它可与 -v 并存)。

    每条日志信息只会显示一次,即使指定了此版本涉及到的多个路径。默认日志信息会追溯复制历史;使用 –stop-on-copy 可以关闭这种行为,这可以用来找出分支点。

      范例:

    svn log
    svn log foo.c
    svn log http://www.example.com/repo/project/foo.c
    svn log http://www.example.com/repo/project foo.c bar.c

      有效选项:

    -r [--revision] ARG  : ARG (一些命令也接受ARG1:ARG2范围)

    版本参数可以是如下之一:

    NUMBER   版本号
    ‘{‘ DATE ‘}’ 在指定时间以后的版本
    ‘HEAD’   版本库中的最新版本
    ‘BASE’   工作副本的基线版本
    ‘COMMITTED’  最后提交或基线之前
    ‘PREV’   COMMITTED的前一版本
    -q [--quiet]      : 不打印信息,或只打印概要信息
    -v [--verbose]     : 打印附加信息
    -g [--use-merge-history] : 从合并历史使用/显示额外信息
    -c [--change] ARG    : 版本 ARG 引起的改变
    –targets ARG      : 传递文件 ARG 内容为附件参数
    –stop-on-copy     : 查看历史不要跨越不同的副本
    –incremental      : 给予适合串联的输出
    –xml          : 输出为 XML
    -l [--limit] ARG    : 日值项最大值
    –with-all-revprops  : 获取所有版本属性
    –with-no-revprops   : 没有找回版本属性
    –with-revprop ARG   : 获取版本属性 ARG

      全局选项:

    –username ARG     : 指定用户名称 ARG
    –password ARG     : 指定密码 ARG
    –no-auth-cache    : 不要缓存用户认证令牌
    –non-interactive    : 不要交互提示
    –trust-server-cert  : 不提示的接受未知的 SSL 服务器证书(只用于选项 “–non-interactive”)
    –config-dir ARG    : 从目录 ARG 读取用户配置文件
    –config-option ARG  : 以下属格式设置用户配置选项:FILE:SECTION:OPTION=[VALUE]

    例如:
    servers:global:http-library=serf

    常用操作

      1.查看最近3个版本日志

    svn log [PATH] -v -l3

      2.查看某两个版本,用来对比

    svn log -r 14:15

      3.日志放入文件

    $ svn log -r 14 > mylog
    $ svn log -r 19 >> mylog
    $ svn log -r 27 >> mylog
    $ cat mylog
    或者
    $ svn log –incremental -r 14 > mylog
    $ svn log –incremental -r 19 >> mylog
    $ svn log –incremental -r 27 >> mylog

    我的常用命令

    查看2013.01.01~2013.07.16的svn log

    1 svn log -v --xml -r {2013-01-01}:{2013-07-16} > logfile.log

    运行statsvn

     

     
  • 相关阅读:
    堆排序
    冒泡排序
    描述字符串写入文件
    Java Socket编程,读服务器几个字符,再写入本地显示。
    final,finally,finalize区别
    圆桌问题 (a)
    表达式
    计算系数
    乌龟棋
    显示图像(多源dfs)
  • 原文地址:https://www.cnblogs.com/valleylord/p/2780514.html
Copyright © 2020-2023  润新知