升级、补丁包所需模块自动化查找

来源:互联网 发布:linux arm编译源码包 编辑:程序博客网 时间:2024/05/17 18:42

当单一的一件事连续做了几次,那我们就要考虑是否可以自动化。因为一但单一,做多了就会觉得无聊,无聊的情况下,人就很容易马虎,导致一些细节上可能出错,另外只要有人参与就可能出错,所以遇到重复无聊的事,我们就应该考虑自动化。就像圣斗士星矢里面的一句话:"同一招对我使用两次是无效的",呵呵~当然我们不可能做到马虎了一次之后不再马虎,我们为了彻底杜绝之后犯错的机会,那我们就让机器来做吧。

 

当某个程序要发布一个升级包,如果程序本身不大,只有几个dll和配置文件,那要找出那些被修改的模块很容易,可能只要花几分钟时间查看一下就能知道。但对于那些比较大的程序,可能有1,2百个模块和无数多个配置文件,在经历了小组内2,3个月的一次迭代后,要找出哪些模块被修改了是件麻烦的事,可能会花费一个上午的时间把这些相关的模块和文件找出来,杯具的是花了那么多时间,最后还可能漏掉了一些,之后的测试可能会发现错误,这就又要花同样甚至更多的时间来校验~

 

我不想在做一次同样的事了,我统计的眼睛都花了,我感觉我现在是机器人,但我还是要把事情做完做好~

 

如何自动查找修改的及被依赖到的模块。

下面的自动化是建立在SVN+window脚本的基础上

1.假设程序代码的目录结构是这样的

...

E:/trunk/Code

E:/trunk/Include

E:/trunk/Config

...

 

其中Code目录存放各个模块的代码,Include是公布出去的接口,Config是配置文件及第三方库等

 

 

2.需要重新编译打包的模块及配置文件

a) Code目录下被修改的模块

b) Config下被修改的文件

a) 用到Include中被修改过的接口的模块

 

如IA修改了,除了找出Code目录下用到IA接口的模块,还要找到用到IB接口的模块,如果还有IC继承或者间接继承自IA则要递归查找,找接口依赖可能是最麻烦的事了

 

3.通过SVN的版本记录,输出指定版本范围修改的文件记录

首先机器上要安装Subversion,然后用下面的命令行

a) -r 1:100指的是输出版本1到100的日志。

b) -v指输出详细日志。

c) --xml以xml方式输出日志

d) http://...trunk/code是我们需要取得日志信息的路径。

e) svnlog.xml输出的日志文件。

f) 如果本机没保存svn用户名和密码,那还要在svn后面加上 --username 用户名 --password ***。

这样svn就会把日志的完整信息输出到文件,我们只要分析此文件就能知道一定时间内被修改了哪些文件了。

g) svnlog.xml的格式大概是这样的(当前电脑没装SVN,只是凭印象大概轮廓是这样的)

这样我们就能获得被修改的配置文件及修改的模块了。

 

4.查找用到修改接口的模块

假设我们修改了接口IA

通过windows提供的命令findstr,具体参数参考findstr,下面只针对用到的做相关解释

a) /s表示还会查找子目录,一直递归下去

b) /m表示当查找到时只显示文件名 ,主要是有利于我们下面的分析

c) /<IA/>,“/<和/>"表示字符串头和字符串尾,也就是严格查找IA,如果文件中存在IAA就不会被查找到。

d) E:/trunk/code/*.cpp表示查找E:/trunk/code/目录下所有.cpp的文件

e) find.txt输出查找信息

 

5.查找修改接口的派生接口,也就是上面提到的IB

a) /<public.*IA/> 其中"."表示任意字符,"*"表示前面的字符出现0次或多次,这里有一个小问题,那就是当有个接口名是publicIA,也将查找出来,但是命名这样的接口很少见,如果要处理就是对查找到的结果再有效性检查一下,也就是deriveInterface.txt文件查找到的结果验证下。

b) /n 表示查找到/<public.*IA/>字符串后显示所在行号,取得行号后我们就可以向上搜索第一个关键子class,之后就能取到IB这个接口名了。

c) E:/trunk/include/*.h表示查找E:/trunk/include/目录下所有.h的文件

d) deriveInterface.txt查找到的结果文件

e) 如果我们找到有接口派生自接口IA,则重复第4第5步,就能找到所有用到这些接口的模块了

f) 下面是findstr几个参数查找的结果

 

 

6.对于上面的几个步骤写个程序串联起来就能实现自动化查找了,再加上编译自动化,一气呵成。但是对于修改了某某接口怎么自动化查找出来,这个问题,有一点复杂了,不知道大家有没好的方法。

 

 

上面所写的只是一种方法,大家有啥更好的方法或者借助第3方软件啥的,可以讨论下~