統計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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM