2011-08-30 53 views
3

我需要一個更智能的提交後腳本。svn post-commit execute(if message〜Revision.blah)

如果一個提交消息聲明類似「Adding Revision-v.10.3 production」,那麼需要執行一個ssh命令。

是否可以通過post-commit做到這一點?

+0

REPOS =「$ 1」,REV =「$ 2」是變量......我如何在提交後獲取'提交消息'字符串? – Cmag

+1

@Clustermagnet:嘗試'MESSAGE = $(/ usr/bin/svn log「$ 1」-r HEAD --limit 1 --incremental | sed'1,3d')'(from [here](http:// www .designified。COM /博客/文章/ 89/AN-svn的,提交後罩-shell腳本到複製的日誌,消息和修訂號碼到了剪貼板上-OS-X) )。 –

+0

@火箭:謝謝! – Cmag

回答

4

沒有簡單的方法從SVN post-commit鉤子獲取提交消息。你可以詢問 svn log的消息,然後解析出來。

MESSAGE=$(/usr/bin/svn log "$1" -r HEAD --limit 1 --incremental | sed '1,3d') 

來源: here

post-commit使用獲得的提交信息如下:

MESSAGE=$(svnlook propget --revprop -r $REV $REPOS_PATH svn:log) 
+0

@David:我不知道。由於某些原因,谷歌搜索「svn post-commit get message」並不會返回很多內容。我在答案中發佈的鏈接是我能找到的最多信息。 –

+0

將更正附加到您的答案,我將刪除我的評論和downmod。以下是關於[Subversion revprops]的信息(http://svnbook.red-bean.com/nightly/en/svn.ref.properties.html#svn.ref.properties.unversioned-props)。以下是關於[svnlook](http://svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.tk.svnlook)命令的信息。不要灰心。這是你學習的方式。 –

+0

@David:感謝您的信息:-) –

1

NO!沒有!沒有!

您應該做的最後一件事是在提交後執行ssh

我不確定你的意圖是什麼,我認爲他們是光榮的。但是,請記住,在提交後掛鉤執行完成之前,Subversion不會將控制權返回給客戶端。如果您的ssh命令只需要十秒鐘執行,那麼用戶在他們可以執行任何操作之前看到掛在那裏的時間爲10秒。

在這十秒鐘內,用戶會對您,公司和Subversion產生憤怒的仇恨。他們會成爲他們以前的自我的emb and,而這將是你的錯!你想讓你感到內疚嗎?沒想到。

最好的解決方案是使用像Jenkins這樣的連續構建服務器,並且可以執行SSH命令。它可以採取命令的結果,如果失敗,則將結果通過電子郵件發送給開發人員及其團隊。詹金斯非常容易設置和使用,並且通過詹金斯(即正確的方式)這樣做不應超過幾個小時(最多)。

因此,用戶提交將不會掛在那裏,但他們仍然會得到他們需要的信息。而且,既然你把它和詹金斯綁在一起,你可能會發現各種各樣的插件給詹金斯,他們會做各種你認爲不可能的奇妙的事情。你會成爲英雄,並被尊爲神。難道不比沸騰的仇恨更好嗎?

選擇是你的。

0

只是一個供參考(順便說一句,你可以做一個svn propget --rev-prop -r $REV svn:log得到提交信息),我剛剛建立了一個PHP腳本EXECUT上後提交。如果你對PHP感到滿意,這會給你很多控制權,並且有可能運行ssh命令。我在這裏概述了它: https://stackoverflow.com/a/10146169/654235