2012-05-21 86 views
0

我試着編寫一個預先提交的鉤子來阻止開發人員進入發佈分支,如果修訂版本不是合併版本。 開發人員只能提交合並修訂。svn pre-commit掛鉤提交而不合並

這是我計劃的行動

的svn:mergeinfo屬性將繼續修訂的軌道,我的pre-commit鉤子merged.so如果我以某種方式設法得到修訂,其即將被committed.i可以檢查它針對mergeinfo輸出來查看版本是否合併。

在理論上,它似乎很容易。問題是我如何得到修訂。

我如何可以grep修訂號出svnlook的命令

原諒我,如果我的問題是愚蠢的。

+0

您試圖阻止發佈分支上的意外提交嗎? – forsvarir

+0

不......我的意圖是停止發佈分支中未合併的提交.ie,開發人員只允許提交合並修訂。這是爲了跟蹤開發分支和發佈分支的修訂。 – born

+0

然後,似乎另一種方法是教育開發人員不要這樣做,並通過權限控制對發行版分支的訪問,如果這不能解決問題。從你的描述看來,我可以通過創建一個隨機分支,合併到發佈版或者在提交之前修改svn:mergeinfo屬性來解決觸發器問題。 – forsvarir

回答

0

如果你的開發人員沒有受過教育,那麼他們可能不會意識到你的svn鉤子在做什麼,如果他們故意編輯svn:mergeinfo屬性純粹是爲了提交發布分支而不是合併,那麼你就有更大的問題。

此腳本檢查提交是否用於發佈分支。 然後它使用svnlook diff來檢查是否存在屬性更改以及svn:mergeinfo是否已更改。

!#/bin/bash 
REPOS="$1" 
TXN="$2" 

#Make the release branch only accept merge commits 
if svnlook changed $REPOS -t $TXN |grep -q "my-release-branch-name/" ; then 
    if svnlook diff $REPOS -t $TXN |grep 'Modified: svn:mergeinfo' && svnlook diff $REPOS -t $TXN |grep 'Property changes on:'; then 
     #Assume that someone hasn't gone to the trouble of making a commit look like a merge! 
     exit 0 
    else 
     echo "Branch my-release-branch-name only accepts merge commits! " 1>&2 
     exit 1 
    fi 
fi 

# All checks passed, so allow the commit. 
exit 0 
+0

這使用/ bin/bash,這幾乎肯定是錯誤的。你可能是指/ bin/sh(這是所有的posix代碼)。如果不是,你的意思是/ usr/bin/env bash –