天天看點

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路徑中,則可以不使用全路徑。