2014-05-17 17 views
0

我正在嘗試使用shell腳本編寫一個預提交鉤子腳本來執行像<application>_<project>_<version>_<iteration>這樣的標籤命名約定。
任何人都可以引導我到一個文檔/鏈接參考,我可以遵循,並可以創建一個。 我已經經過許多環節走了,但它並沒有爲我在svn中執行標籤命名約定

我試圖這樣做的工作:

ERROR = $SVNLOOK changed $REPO -t $REV |$EGREP "^A.+?/([a-z0-9_]+)/tags/\1-[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?-(dev|rc[0-9]+|final)/.*$" |$WC -l

在正則表達式時需要幫助(EGREP)的一部分,使我可以創建它。

+0

標籤名這樣 _ _ _ Aman

回答

0

我不記得之後將純服務器端副本(懶得RTFM或用手檢查)被鉤執行,但無論如何

在鉤你必須使用不同的子

svnlook命令

由於掛鉤倉庫範圍的第一次檢查將是「它是承諾/tags或倉庫的另一子樹」 svnlook dirs-changed(爲了看到不同版本的輸出嘗試命令手,在良好的OS的情況下svnlook dirs-changed |grep tags會回答有問題)

在提交到/標籤的情況下,您必須獲取並檢查/tags內(已創建)subdir的名稱。這裏的服務器端標記和WC給予標記(至少對我來說)不同的結果

svnlook的迪爾斯,改變

服務器端標記

>svnlook dirs-changed z:\repo 
tags/ 

WC標記

>svnlook dirs-changed z:\repo 
tags/ 
tags/App_Main_1.0.0_2/ 
tags/App_Main_1.0.0_2/1/ 
tags/App_Main_1.0.0_2/1/2/ 

svnlook changed

服務器端標記

>svnlook changed z:\repo 
A tags/App_Main_1.0.0_1/ 

WC標記

>svnlook changed z:\repo 
A tags/App_Main_1.0.0_2/ 
U tags/App_Main_1.0.0_2/1/2/c.txt 
U tags/App_Main_1.0.0_2/1/b.txt 
U tags/App_Main_1.0.0_2/a.txt 

並且這種顯着的差異是下相同樹觀察到標籤內

>svnlook tree z:\repo 
... 
tags/ 
    App_Main_1.0.0_1/ 
    1/ 
    2/ 
    c.txt 
    b.txt 
    a.txt 
    App_Main_1.0.0_2/ 
    1/ 
    2/ 
    c.txt 
    b.txt 
    a.txt 
... 

我認爲,代替添加鉤子內的一些邏輯(但你可能會嘗試對兩種類型的標籤都使用svnlook changed | head -n 1:只捕獲帶有創建標籤名稱的輸出的第一行),則必須執行嚴格的標記策略「僅標記trunk的HEAD(使用服務器端副本)」。

在這種情況下,測試會更短和reabable,像svnlook changed | grep -q -E REGEXP(有建築物進行測試慣例<application>_<project>_<version>_<iteration> REGEXP是你的任務),加上|減去一些細節

+0

日Thnx 4這樣的詳細解釋。 我相信你要我2試試這樣 – Aman

+0

ERROR ='$ SVNLOOK改變了$ REPO -t $ REV | $ EGREP「^ A。+?/([a-z0-9 _] +)/ tags/\ 1- [ 0-9] + \ [0-9] + \ [0-9] +(\ [0-9] +。) - ?(DEV | RC [0-9] + |最終)/.*$ 「| $ WC -l' – Aman