在編寫任何類型的svn鉤子時,如果需要關於倉庫或關於事務的信息,您希望使用shell腳本中的svnlook
程序,或者使用您選擇的語言使用svn API。使用svnlook
速度更快,因爲它繞過了所有svn RA(遠程訪問)代碼,包括授權檢查層 - 因爲腳本正在服務器上下文中運行,所以這不是問題。此外,您沒有更新您不使用的工作副本以及文件類型信息以外的任何額外開銷。
svnlook
包含許多選項用於調查修訂(用於post-* hooks)和事務(用於預處理*事務)。這裏特別感興趣的是changed
選項。顯示
changed: usage: svnlook changed REPOS_PATH
Print the paths that were changed.
Valid options:
-r [--revision] ARG : specify revision number ARG
-t [--transaction] ARG : specify transaction name ARG
--copy-info : show details for copies
即由修訂或事務的變化,像這樣:
A trunk/src/new-dir/
A trunk/src/new-dir/newheader.h
A trunk/src/new-dir/newsrc.c
U trunk/src/existingsrc.c
從svnlook的輸出,引用一個目錄時,總是在/結束。這是用於檢測文件或目錄的簡單鑑別器。
但是,在處理刪除操作時,事情確實會變得模糊不清。如果目錄被刪除,目錄下的所有內容也會被刪除,並且此信息不會顯示在changed
中。看到這裏:
D trunk/src/new-dir/
U trunk/src/existingsrc.c
根據你在看什麼的描述,我會猜測你正在尋找某種形式的提交後報告。如果是這樣,你可能想檢查出the subversion mailer post-* hook。即使您不想通過電子郵件發送結果,該代碼也會演示如何使用svn API瀏覽事務或修改更改。
哇,我從來沒有想過這件事。感謝您回答這個問題,儘管我已經放棄了這個並轉移到了Git。 – 2011-03-19 15:00:07