统计svn上两个版本或一段时间内的代码修改行数
2016-07-22 10:18
483 查看
http://blog.csdn.net/skygpan/article/details/47749891
有的时候,我们想要统计svn上两个版本或一段时间内的代码修改行数。我们可以通过svn提供的svn diff命令帮助我们解决这个问题。
1. 含有1个+或-开头的行
2. 含有3个+或-开头的行
3. 不含有+和-开头的行
其中:1个+和-说明对文件的增加,修改和删除操作。我们只要知道这个,就可以统计修改的代码行数了。
其他符号说明
我们只要统计以+开头的行,就可以知道修改代码的总行数了,为了统计有效修改行数,我们还要剔除掉以+开头并且后面没有内容的空行。
下载完整源码
顺便说下,statsvn中内置了该功能
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中内置了该功能
相关文章推荐
- About SVN
- CentOS 6.5搭建Apache整合SVN 1.8.5服务器(多版本库权限配置)
- CentOS下SVN服务器测试版安装记录
- 如何在本机搭建SVN服务器
- Windows下搭建本地SVN服务器
- 让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
- Windows下SVN服务器搭建方法整理(apache)
- Apache2+SVN+MYSQL认证 配置项详细步骤
- 在Fedora 10下配置SVN服务器的步骤
- 删除SVN三种方法delSvn(windows+linux)
- 探讨如何在Eclipse中过滤版本控制文件.svn
- linux下安装配置svn独立服务器的步骤分享
- 浅析SVN常见问题及解决方法
- 关于svn冲突的解决方法
- 基于Eclipse中SVN图标不显示的解决方法
- Shell脚本实现的基于SVN的代码提交量统计工具
- 一天一个shell命令 linux文本操作系列-diff命令详解
- Ubuntu下定时提交代码到SVN服务器的Shell脚本分享