使用statsvn统计svn中项目代码行数时,出现如下问题,该如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用statsvn统计svn中项目代码行数时,出现如下问题,该如何解决?相关的知识,希望对你有一定的参考价值。

Parsing SVN log 'd:\statsvn\svn.log'No exclude pattern
Cache: org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 1; 文件提前结
束。
Scheduled 0 svn diff calls on 0 threads.
Generating report for /Trunk/Project/test into
Using default CSS file (objectlab-statcvs.css)
memory usage After Build: 27136.0 kb
The repository object is not valid. Please check your settings.
Possible reasons:
1/ Did you use the option -v to create the SVN log
2/ Is the log file empty?
3/ Do you run from a checked out directory (you should)?
4/ Do you have non-committed items?

还有一种可能是你checkout的目录在SVN服务器上被改动了,比如我本地的/Web/MPWeb被修改为/Web/MPWeb_2017,这样你对Checkout下来的目录生成log文件中,路径还是老的/Web/MPWeb,如下:
<?xml version="1.0" encoding="UTF-8"?>
<log>
<logentry
revision="6305">
<author>xxxxxx</author>
<date>2017-02-28T18:09:56.025844Z</date>
<paths>
<path
action="M"
prop-mods="false"
text-mods="true"
kind="file">/Web/MPWeb/src/pccom/common/filter/MobileLoginFilter.java</path>
</paths>
<msg></msg>
</logentry>
由于/Web/MPWeb目录不存在了,自然生成报表失败了。
所以解决方案是手动修改logfile文件中的目录名为当前的正确路径/Web/MPWeb_20170301,再运行命令:
java -jar statsvn.jar D:\MyProjects\logfile.log D:\MyProjects
就好了。
参考技术A StatSVN是一个Java写的开源代码统计程序,从statCVS移植而来,能够从Subversion版本库中取得信息,然后生成描述项目开发的各种表格和图表。比如:代码行数的时间线;针对每个开发者的代码行数;开发者的活跃程度;开发者最近所提交的;文件数量;平均文件大小;最大文件;哪个文件是修改最多次数的;目录大小;带有文件数量和代码行数的Repository tree。StatSVN当前版本能够生成一组包括表格与图表的静态html文档。 参考技术B 因为你导出的SVN日志是空的,所以日志解析失败了

svn代码统计

分享一个自己写的svn代码统计的脚本,不喜绕行:

统计项目每个人修改的文件的个数和行数

#!/bin/bash
# 统计项目每个人修改的文件的个数和行数

Svn_pro=http://192.168.1.1/svn/project

# 版本库最后修改的信息
Now_date=`date ‘+%F‘`
next_date=`date -d "next day" +%Y-%m-%d`

#echo -e " 版本库最后修改信息: "
#svn info http://192.168.1.1/svn/project  --username  username --password password 2>/dev/null | awk ‘NR>6 ‘
(( user_count=${#Svn_user[@]}-1 ))

# 修改的文件
#list_value=`svn diff -r {$Now_date}:{$next_date} --summarize http://192.168.1.1/svn/project  --username  username --password password | awk ‘{print $2}‘ `
list_value=`svn diff -r {$Now_date}:{$next_date} --summarize http://192.168.1.1/svn/project  --username  username --password password | awk ‘{print $2}‘ `
list=(`echo $list_value`)
(( count=${#list[@]}-1 ))
for i in `seq 0 $count`
do
    edit=`svn blame -r {$Now_date}:{$next_date}  ${list[$i]}  --username  username --password password | awk ‘{print $2}‘ | grep -v "-" | wc -l`
    if [ $edit -ne 0 ];then
    #echo -e "-----------------------------------------------------------------------------------------------" >> $0.log
    #echo -e "${list[$i]}文件增加行数:" >> $0.log
    #svn blame -r {$Now_date}:{$next_date}  ${list[$i]}  --username  username --password password | awk ‘{print $2}‘ | grep -v "-" | sort | uniq -c
    svn blame -r {$Now_date}:{$next_date}  ${list[$i]}  --username  username --password password | awk ‘{print $2}‘ | grep -v "-" | sort | uniq -c >> $0.log
    fi
done

#echo -e "Author\t\tTotal lines"
awk ‘{sum[$2]+=$1}END{for(c in sum){printf "%-16s%-10s\n",sum[c],c}}‘ $0.log  > total
#echo "--------------------------------------------------------"
#echo -e "Change file\tAuthor"
cat $0.log | awk ‘{print $2}‘ | sort | uniq -c > file

echo -e "Author Change_file Total_lines"
awk ‘NR==FNR{a[i]=$0;i++}NR>FNR{print a[j]" "$0;j++}‘ total file | awk ‘{print $4,$3,$1}‘

rm -f $0.log total file

统计代码修改的详情

#!/bin/bash
# 统计项目代码修改的详情
Svn_pro=http://192.168.1.1/svn/project

# 版本库最后修改的信息
Now_date=`date ‘+%F‘`
next_date=`date -d "next day" +%Y-%m-%d`

#echo -e " 版本库最后修改信息: "
#svn info http://192.168.1.1/svn/project   --username  username --password password 2>/dev/null | awk ‘NR>6 ‘
(( user_count=${#Svn_user[@]}-1 ))

# 修改的文件
#list_value=`svn diff -r {$Now_date}:{$next_date} --summarize http://192.168.1.1/svn/project   --username  xiaodx --password [email protected] | awk ‘{print $2}‘ `
list_value=`svn diff -r {$Now_date}:{$next_date} --summarize http://192.168.1.1/svn/project   --username  xiaodx --password [email protected] | awk ‘{print $2}‘ `
list=(`echo $list_value`)
(( count=${#list[@]}-1 ))
for i in `seq 0 $count`
do
    edit=`svn blame -r {$Now_date}:{$next_date}  ${list[$i]}  --username  xiaodx --password [email protected] | awk ‘{print $2}‘ | grep -v "-" | wc -l`
    if [ $edit -ne 0 ];then
#   echo -e "-----------------------------------------------------------------------------------------------"
#   echo -e "\033[36m ${list[$i]}t文件增加行数:\033[0m" >> $0.log
    echo -e "${list[$i]}文件增加行数:" >> $0.log
#   svn blame -r {$Now_date}:{$next_date}  ${list[$i]}  --username  xiaodx --password [email protected] | awk ‘{print $2}‘ | grep -v "-" | sort | uniq -c
    svn blame -r {$Now_date}:{$next_date}  ${list[$i]}  --username  xiaodx --password [email protected] | awk ‘{print $2}‘ | grep -v "-" | sort | uniq -c >> $0.log
    fi
done

以上是关于使用statsvn统计svn中项目代码行数时,出现如下问题,该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

svn代码量统计工具StatSVN的使用

针对已有产品或项目升级代码统计方案

针对已有产品或项目升级代码统计方案

statsvn使用详细说明

SVN的可视化日志统计工具StatSVN

statsvn