您的位置:首页 > 编程语言

统计svn上两个版本或一段时间内的代码修改行数

2016-07-22 10:18 483 查看

http://blog.csdn.net/skygpan/article/details/47749891

有的时候,我们想要统计svn上两个版本或一段时间内的代码修改行数。我们可以通过svn提供的svn diff命令帮助我们解决这个问题。

svn环境

首先,你必须要有一个svn的环境。如果你安装的是TortoiseSVN客户端,那么一定要安装command line client tools。这个就是svn最基本的命令行工具。



比较文件

通过如下命令比较文件差异并输出到文件
svn diff -r 13605:13762 https://192.168.1.1/xxx --username xxx --password xxx > c:/temp_svn_file

分析文件

打开文件,可以看到如下几种类型:

1. 含有1个+或-开头的行

2. 含有3个+或-开头的行

3. 不含有+和-开头的行
其中:1个+和-说明对文件的增加,修改和删除操作。我们只要知道这个,就可以统计修改的代码行数了。
其他符号说明
我们只要统计以+开头的行,就可以知道修改代码的总行数了,为了统计有效修改行数,我们还要剔除掉以+开头并且后面没有内容的空行。

实现

java实现

<code class="language-java hljs  has-numbering"><span style="font-size:14px;">BufferedReader r = <span class="hljs-keyword">new</span> BufferedReader(<span class="hljs-keyword">new</span> FileReader(<span class="hljs-keyword">new</span> File(<span class="hljs-keyword">this</span>.tempFile)));
<span class="hljs-keyword">while</span> ((line = r.readLine()) != <span class="hljs-keyword">null</span>) {
<span class="hljs-keyword">if</span> (line.startsWith(<span class="hljs-string">"+"</span>) && !line.startsWith(<span class="hljs-string">"+++"</span>) && !isBlank(line.substring(<span class="hljs-number">1</span>))) {
count++;
}
}
r.close();</span></code>

下载完整源码

shell脚本实现

<code class="language-shell hljs bash has-numbering"><span style="font-size:14px;"><span class="hljs-shebang">#! /bin/bash</span>
<span class="hljs-comment"># 计算有效变更代码量的脚本</span>
<span class="hljs-comment">#./svnCount -thttps://192.168.1.1/xxx -s1000 -e2000 -uxxx -pxxx</span>
<span class="hljs-function"><span class="hljs-title">version</span></span>() {
OS=`uname -o`
<span class="hljs-built_in">echo</span> <span class="hljs-string">"Source_counter (<span class="hljs-variable">$OS</span>) 0.0.1"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"  tony bai (http://tonybai.com)"</span>
}

<span class="hljs-function"><span class="hljs-title">usage</span></span>() {
<span class="hljs-built_in">echo</span> <span class="hljs-string">"usage: source-counter [-t SVN_REPOSITORY_URL] [-s START_REVISION]"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"                      [-e END_REVISION] [-u USER_NAME]"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"                      [-p PASSWD]"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"       source-counter [-v|-h]"</span>
<span class="hljs-built_in">echo</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"        -t,                 目标SVN库地址"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"        -s,                 起始修订号"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"        -e,                 结束修订号"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"        -u,                 svn帐号"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"        -p,                 svn密码"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"        -h,                 帮助"</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"        -v,                 版本信息"</span>
}

<span class="hljs-keyword">if</span> [ <span class="hljs-variable">$#</span> <span class="hljs-operator">-lt</span> <span class="hljs-number">2</span> ]; <span class="hljs-keyword">then</span>
usage
<span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">while</span> <span class="hljs-built_in">getopts</span> <span class="hljs-string">"t:s:e:u:p:vh"</span> opt; <span class="hljs-keyword">do</span>
<span class="hljs-keyword">case</span> <span class="hljs-variable">$opt</span> <span class="hljs-keyword">in</span>
t) target=<span class="hljs-variable">$OPTARG</span>;;
s) start_revision=<span class="hljs-variable">$OPTARG</span>;;
e) end_revision=<span class="hljs-variable">$OPTARG</span>;;
u) user=<span class="hljs-variable">$OPTARG</span>;;
p) passwd=<span class="hljs-variable">$OPTARG</span>;;
v) version; <span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>;;
h) usage; <span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>;;
<span class="hljs-keyword">esac</span>
<span class="hljs-keyword">done</span>

<span class="hljs-keyword">if</span> [ -z <span class="hljs-variable">$target</span> ]; <span class="hljs-keyword">then</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"请输入目标SVN库地址!"</span>
<span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ -z <span class="hljs-variable">$start_revision</span> ]; <span class="hljs-keyword">then</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"请输入起始修订号!"</span>
<span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>

<span class="hljs-keyword">if</span> [ -z <span class="hljs-variable">$end_revision</span> ]; <span class="hljs-keyword">then</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">"请输入终止修订号!"</span>
<span class="hljs-keyword">exit</span> <span class="hljs-number">1</span>
<span class="hljs-keyword">fi</span>

TEMPFILE=temp.log
USERNAME=<span class="hljs-variable">${user:-}</span>
PASSWD=<span class="hljs-variable">${passwd:-}</span>

svn diff -r<span class="hljs-variable">$start_revision</span>:<span class="hljs-variable">$end_revision</span> <span class="hljs-variable">$target</span> > <span class="hljs-variable">$TEMPFILE</span>
<span class="hljs-comment">#去掉含空格的空行</span>
add_lines_count=`grep <span class="hljs-string">"^+"</span> <span class="hljs-variable">$TEMPFILE</span> | grep -v <span class="hljs-string">"^+++"</span> | sed <span class="hljs-string">'s/^.//'</span>| sed s/[[:space:]]//g |sed <span class="hljs-string">'/^$/d'</span>|wc <span class="hljs-operator">-l</span>`
<span class="hljs-built_in">echo</span> <span class="hljs-string">"the actually incremental source code lines = <span class="hljs-variable">$add_lines_count</span>"</span></span></code>


顺便说下,statsvn中内置了该功能

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  svn diff