[英]SVN: get file properties from post-commit hook
是否可以從提交后掛鈎獲取文件屬性?
我想檢查所有更改的文件,如果其中一個或多個具有我的特定屬性,我想執行一些操作。
svn propget my:property file.txt
^這僅從本地工作副本讀取屬性,但是我在執行鈎子的環境中沒有屬性。
謝謝!
使用掛鈎時,應使用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
shell的問題之一是您不能非常輕松地在循環中進行循環。 例如,如果我可以使用$SVNLOOK plist
操作,那會很好,但是我已經將STDOUT管道傳輸到STDIN,因此svnlook plist
任何輸出都會影響我的外循環。 您可以做各種奇怪的事情來使用其他文件描述符,但是使用Python或Perl則更容易。
您實際上也無法更改任何有關提交的內容。 您不能更改文件或文件屬性。 您唯一可以更改的是修訂屬性,例如svn:log
,甚至不建議這樣做。
不確定您的想法,但要小心。 還應了解,任何可能花費太長時間的操作都會延遲用戶的提交,因為他們等待您的提交后腳本運行。 我見過人們嘗試在Subversion掛鈎中編譯和運行單元測試。 在這種情況下,最好使用像Jenkins這樣的連續構建系統來進行后期提交處理。
您可以看一下我的svn-watcher-hook ,看看它是如何完成的。 這是一個Perl腳本,但並不那么復雜,我嘗試解釋我所做的一切。 應該不難理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.