关于Daily Build的ant 脚本中列出svn log 的方法

最近闲着没事,真的是很闲,居然要我去看看oracle数据库performance tuning,而且应为太闲,发现了effective oracle by design 的第八章了,是itpub 上的一位会员找tom ,要的,这个帖子在 http://www.itpub.net/221173,2.html , 超爆笑,具体请看我的另一篇文章

http://jjjava.iteye.com/admin/show/101065

因为公司的QA抱怨说速度很慢,我们只有Stage环境,生产环境不在我们这边,公司唯一的一个DBA 被派去做enhancement 了(汗) ,于是被指派研究如何在ant 脚本中显示svn 中的commit 消息.需求大概是这样的:

每次commit 的时候我们都会填写commit 的message , 比如 bug fix #98435 : <<bug description="">> 或者类是 EN #19841 : <<xxxx enhancement="">> , 然后我们的Stage 环境,就是大家可以公共访问的环境也同时提供给QA 做test 的环境,每天会更新两次早上8:30一次(这个时候大家还没有上班),然后下午5:00一次(我们6:00下班),8:30更新的时候公司没人,主要是针对昨天新做完的EN 和 5点过后check in 的bug , 5:00 的更新最要是让QA 做Bug verify (因为每天结束了,Team Leader 要把bug 发到美国那边去,美国那边就不用做重复的工作了) .我们以前有什么check in 都是Team Leader 发邮件给QA , 告诉他们那些bug check in 了,那些enhancement check in 了,然后全部都是靠搜集我们每天提交给他的work list , 然后他就凭脑袋记住然后发邮件给QA , 这样一个是容易出错,有可能是我们自己写的work list 出错了,比如写错了bug number ,另一个是Team Leader 忘记搜集某个人work list 了( 我们不用issue tracking 工具,因为美国那边认为不值得花钱买一个JIRA , 而且他们相信他们用手工的方式工作了多年也没有什么很大的问题,即使我们自己用开源的issue tracking 工具,他们也拒绝合作,强吧),所以就要我写个ant script 来自动在邮件里面列出更新了bug 或者enhancement.</xxxx></bug>

现在的情况:
我们已经有ant script 可以执行 更新code > 编译code > 混淆 code > 最后发邮件给所有人 , 我们更新的时候是用的windows 系统的task scheduler.

改变之后的状态:
update 的时候要有update log 和 更新的文件列表 , 邮件里面要有update.log 的消息

方便QA 快速知道开发的状态.

用ant 脚本来更新code 都是用的svnkit 包,首先下载svnkit 包, 大概是以下几个文件,svnkit.jar , svnant.jar , SvnClientAdapter.jar ,svnjavahl.jar(文件名记得不是很清楚了),放到ant 的lib 目录下面, 具体参考http://subclipse.tigris.org/svnant.html 上面的文档.

我查了一下如何显示svn 的update log 方法 :

http://svnbook.red-bean.com/en/1.0/re15.html

你要先装svn 的客户端(运行这个例子的时候需要,不是你用svnkit 的时候需要)

然后

svn log [PATH]

svn log URL [PATH...]

它有几个参数:
--revision (-r) REV
--quiet (-q)
--verbose (-v)
--targets FILENAME
--stop-on-copy
--incremental
--xml
--username USER
--password PASS
--no-auth-cache
--non-interactive
--config-dir DIR

比如:
svn log http://svn.red-bean.com/repos/test/foo.c
它会列出所有的foo.c 这个文件的所有修改历史

svn log http://svn.red-bean.com/repos
它会列出你整个项目的修改历史

svn log http://
svn.red-bean.com/repos -r 14 >mylog.txt
svn log http://svn.red-bean.com/repos -r 19>>mylog.txt
svn log http://svn.red-bean.com/repos -r 20>>mylog.txt
它会先创建一个revision 14 的mylog.txt 文件,后面两个命令会把revision 19 个和revision 20 的log 加入到mylog.txt 文件中.
关于svn log 命令行的详细用法请参考
http://svnbook.red-bean.com/en/1.0/re15.html


接着我就研究怎么样在ant script 里面加入svn 的log 信息.

我发现打开svnant.jar 包的时候里面有个 svn.xml 文件,里面记录的就是所有svnkit 支持的svn ant task . 其中只需要一个就够了,

<taskdef classname="org.tigris.subversion.svnant.SvnTask" name="svn"></taskdef>

接着我就写script ,

<taskdef classname="org.tigris.subversion.svnant.SvnTask" name="svn"></taskdef>

<target name="updateSVN"><svn javahl="true" password="xxxPassword" username="xxxUser"><svn javahl="true"><log destfile="revision.log"></log></svn></svn></target>

xml 代码
  1. <target name="updateSVN" >
  2.      <svn username="XXX" password="XXX" javahl="true">
  3.          <update dir="${XXX}" />
  4.      </svn>
  5.      <svn javahl="true">
  6.          <log destfile="revision.log"
  7.               path="${XXX}"
  8.               asXml="false"
  9.               startRevision="HEAD"
  10.               stopRevision="PREV" />
  11.      </svn>
  12.      <echo message="Update finished successfully, please see attached for version information!" />
  13. </target>
<target name="updateSVN"><svn javahl="true" password="xxxPassword" username="xxxUser"><svn javahl="true"><echo message="Update finished successfully, please see revision.log for version information!"></echo></svn></svn></target>

<target name="updateSVN"><svn javahl="true" password="xxxPassword" username="xxxUser"><svn javahl="true"><echo message="Update finished successfully, please see revision.log for version information!">
</echo></svn></svn></target>

其中startRevision 和 stopRevision 的值可以是

HEAD : 版本库中最新的(或者是“最年轻的”)版本。 BASE : 工作拷贝中一个条目的修订版本号,如果这个版本在本地修改了,则“BASE版本”就是这个条目在本地未修改的版本。 COMMITTED : BASE版本之前(或在Base)一个项目最后修改的版本。 PREV : 一个项目最后修改版本之前的那个版本(技术上为COMMITTED -1)。

这段代码就是在你的script 目录下面会产生一个revision.log 文件,大概这样的格式

------------------------------------------------------------------------
r14 | ... xxx bug fix #123456 :xxx

------------------------------------------------------------------------
r15 | ... xxx en #123456 : xxx

------------------------------------------------------------------------

然后发邮件:
<target depends="obfuscate" name="email"> <mail mailhost="xxx.xxx.xxx"><from address="developers@xxx.com" name="xxx"></from></mail></target>

<target depends="obfuscate" name="email"><mail mailhost="xxx.xxx.xxx"><from address="developers@xxx.com" name="xxx"> </from></mail></target>

xml 代码
<target name="sendmail" depends="obfuscate"> <mail mailhost="XXX.XXX.XXX" subject="Stage Updated at ${updatetime}" messagefile="revision.log" files="result.log"> <from name="Stage Update Agent" address="developers@XXX.con" /> <to name="Developers" address="developers@XXX.con" /> mail> target>


最后这样就算是完成了.
关于svnant 的详细task 请参考 http://subclipse.tigris.org/svnant/svn.html
关于svn 版本号之间的区别 http://svnbook.subversion.org.cn/1.2/svn.tour.revs.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值