2012-04-11 60 views
1

是否有可能從提交後鉤子獲取文件屬性?SVN:從提交後鉤子獲取文件屬性

我想檢查所有更改的文件,如果其中一個或多個具有我的特定屬性,我想執行一些操作。

svn propget my:property file.txt 

^這隻從本地工作副本讀取屬性,但我沒有它在執行掛鉤的環境中。

謝謝!

回答

1

當您使用掛鉤時,應該使用svnlook命令而不是svn命令。

TXN=$1 
REPOS=$2 
SVNLOOK="/usr/bin/svnlook" 

"$SVNLOOK" pget -t $TXN $REPOS my:property /path/in/repository 

你可以已經通過svnlook changed命令被改變文件的列表:

/usr/bin/svnlook changed -t $TXN 

這將爲您提供與變更類型(U =更新,d =刪除,M =修改,R =替換)和文件的名稱。您可以使用該文件名與svnlook pget命令查看該屬性。

也許是這樣的:

$SVNLOOK changed -t $TXN | while read changeType fileName 
do 
    $SVNLOOK plist -t $TXN -v $REPOS $fileName 
done 

一個與外殼的一個問題是你不能做循環中循環很容易。例如,如果我可以用$SVNLOOK plist做一些事情,但是我已經將STDOUT傳遞給STDIN,那麼將會很好,所以svnlook plist的任何輸出都會影響我的外部循環。你可以做各種奇怪的東西來使用其他文件描述符,但使用Python或Perl更簡單。

你也真的不能改變任何關於提交。您不能更改文件或文件屬性。唯一可以更改的是像svn:log這樣的修訂版本,甚至不建議這樣做。

不確定你在想什麼,但要小心。還要明白,任何可能花費太長時間的操作都會延遲用戶的提交,因爲它們會等待您的提交後腳本運行。我見過有人試圖在Subversion鉤子中編譯和運行單元測試。在這種情況下,最好使用像Jenkins這樣的連續編譯系統來執行提交後處理。

你可以看看我的svn-watcher-hook看看它是如何完成的。這是一個Perl腳本,但它並不複雜,我試圖解釋我所做的一切。它不應該太難理解。

+0

謝謝,這工作。我也會看看詹金斯,因爲我已經有一些鉤子動作了,添加這個可能會減慢svn – innin 2012-04-12 11:22:54