首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > CVS SVN >

powershell生成svn日记(word)

2013-03-25 
powershell生成svn日志(word)目标:从svn中得到日志,按给定的式生成Word文件。word文件式如下:每日构建更新

powershell生成svn日志(word)
目标:从svn中得到日志,按给定的格式生成Word文件。word文件格式如下:
每日构建更新记录

标记说明:
+ 新功能全部完成。
# 新功能部分完成。
@ 功能完善(原来已经完成的功能,再次完善)。
* 修正bug(需要在“每日构建日志”中体现的BUG)。
!不能从页面体现的内容。


2013-03-14  Eagle_V2.0   SVN版本号:2254

一  界面可查看内容

1.     [+]生成拆线图
2.     [+]查询条件设置完成

二  其他内容

1.     [@]告警信息信息调整
2.     [!] 扩展ExtJS的Combobox
3.     [!] 修改ODS图标
4.     [!]去掉公式编辑器的验证
5.     [!]去除新增‘图表’‘混排’类型的报表时同时增加的报警查询条件
6.     [@]告警控件编写
7.     [*]修改BUG:Compo00006126 列表-表内链接:选择外部链接后,录入链接地址时页面显示有问题 已修正

其中红色的部分是要从svn日志中提取,其他部分为固定内容。为了实现这个功能,我选择了使用powershell脚本。分析:要生成这个文件就是要把这个文件中红色的部分替换成实际的内容,包括4个部分:1. 当前日期;2. svn版本号;3. 日志中[+]开头的注释;4. 日志中全部的注释;
准备:为了实现这个功能,把上面文档中的内容分别定义为:%date%,%version%,%display%和%all%,在生成word文档时使用查找替换。
实现代码:

#定义生成word的函数function buildWord([string]$svnUrl,[string]$projectPath){     #定义后面会用到的目录、文件等常量     $workspace = "E:\Java\Jenkins\jobs\Email\workspace"     $logFile = "E:\Java\Jenkins\jobs\Email\workspace\eagle2.log"     $wordFile = "$workspace\Eagle_V2.doc"     $lastdate =  (get-date).toString("yyyy-MM-dd")     $nextDay = (get-date).addDays(1).toString("yyyy-MM-dd")     #执行svn得到当天提交的日志     cmd /C "E:\Java\Subversion\bin\svn log $svnUrl -r{$lastdate}:{$nextDay} --username lichenglin --password 123 >""$logFile"""     #复制模板文件为要生成的文件     cmd /C "copy /Y $workspace\Eagle_V2_2.doc $wordFile"     # word操作要使用的变量     $ReplaceAll = 2     $FindContinue = 1     $MatchCase = $False     $MatchWholeWord = $True     $MatchWildcards = $False     $MatchSoundsLike = $False     $MatchAllWordForms = $False     $Forward = $True     $Wrap = $FindContinue     $Format = $False     #打开word     $wordApp = New-Object -COM Word.Application     $wordApp.Visible = $False     #$file = (dir $wordFile).FullName     $doc = $wordApp.Documents.Open($wordFile)     $Selection = $wordApp.Selection     #日期     $FindText = "%date%"     $replaceText = get-date -format yyyy-MM-dd     $Selection.Find.Execute(          $FindText,          $MatchCase,          $MatchWholeWord ,          $MatchWildcards,          $MatchSoundsLike,          $MatchAllWordForms,          $Forward,          $FindContinue,          $Wrap,          $replaceText,          $ReplaceAll     )     #版本     $FindText = "%version%"     #使用svnversion得到给定目录或文件的svn版本号     $replaceText = E:\Java\Subversion\bin\svnversion $projectPath     $Selection.Find.Execute(          $FindText,          $MatchCase,          $MatchWholeWord ,          $MatchWildcards,          $MatchSoundsLike,          $MatchAllWordForms,          $Forward,          $FindContinue,          $Wrap,          $replaceText,          $ReplaceAll     )     $Range = ""     $ConfirmConversions= $False     $Link = $False     $Attachment = $False     #显示的内容     $FindText = "%display%"     #从日志文件中取[+]开始的行,并加上行号后,保存到mylog1.log文件中     cat $logFile | select-string -pattern \[\+\] |foreach-object -process {($num++).tostring() + ".  " + $_}> $workspace\mylog1.log;     #选中"%display%"     $Selection.Find.Execute(          $FindText,          $MatchCase,          $MatchWholeWord ,          $MatchWildcards,          $MatchSoundsLike,          $MatchAllWordForms,          $Forward     )     #用文件中的内容替换选中的内容     $Selection.InsertFile("""$workspace\mylog1.log""", $Range, $ConfirmConversions, $Link, $Attachment)     #所有svn日志     $FindText = "%all%"     cat $logFile | select-string -pattern \[.\]  |foreach-object -process {($num++).tostring() + ".  " + $_}> $workspace\mylog2.log;     #clip|$replaceText     #$replaceText     $Selection.Find.Execute(          $FindText,          $MatchCase,          $MatchWholeWord ,          $MatchWildcards,          $MatchSoundsLike,          $MatchAllWordForms,          $Forward     )     $Selection.InsertFile("""$workspace\mylog2.log""", $Range, $ConfirmConversions, $Link, $Attachment)     #关闭word     $doc.close()     $wordApp.Quit()}#调用函数生成word文档buildWord "http://192.168.0.123:8088/svn/honghe_V2/04Code/v2.0/honghe" "E:\Java\Jenkins\jobs\Eagle_V2.0\workspace"

说明:1. 该脚本用户jenkins自动执行,前置操作是jenkins使用Svn更新了指定目录中的文件,后继操作是发送生成的文件给指定的人。2. 如果 svn目录配置在系统path路径中,则可以不使用全路径。

热点排行