簡體   English   中英

SVN:從提交后掛鈎獲取文件屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM