[SVN] Hook scripts的使用方法
為了達成Subversion在Commit前後能自行控管,例如:
- Commit之前(Pre-commit)自行檢查權限,只有符合者能繼續Commit
- Commit之後(Post-commit)自動寄Mail給特定人員
- Commit之後將異動資訊寫入資料庫,以方便日後查詢
Subversion提供了下列幾種可供自行處理的事件,供自行擴充的檔案稱為Hook scripts(必須是可執行檔,在Windows裡就是副檔名為.bat、.exe、.cmd等的檔案),其範例樣板皆存放於Subversion檔案庫的hooks資料夾裡:
序 | 事件 | 功能說明 | 範例樣板 |
1 | Pre-commit | Commit之前被執行 | pre-commit.tmpl |
2 | Pre-lock | 檔案鎖定之前被執行 | pre-lock.tmpl |
3 | Pre-revprop-change | 檔案庫被新增、修改或刪除前被執行 | pre-revprop-change.tmpl |
4 | Pre-unlock | 檔案解除鎖定之前被執行 | pre-unlock.tmpl |
5 | Post-commit | Commit之後被執行 | post-commit.tmpl |
6 | Post-lock | 檔案鎖定之後被執行 | post-lock.tmpl |
7 | Post-revprop-change | 檔案庫被新增、修改或刪除後被執行 | post-revprop-change.tmpl |
8 | Post-unlock | 檔案解除鎖定之後被執行 | post-unlock.tmpl |
9 | start-commit | 異動開始前被執行 | start-commit.tmpl |
這裡的處理觀念都和CVS類似(可參加我先前寫的這篇:loginfo.rb:自動寄送修改記錄信件),但麻煩的是Subversion只傳出檔案庫路徑和發生異動的Revision序號,其他資料資訊如作者、異動時間、異動檔案、異動內容等,都不會直接傳出來給Hook scripts;看了一些文件和範例程式後,發現這些資訊必須透過svn-win32-1.2.3binsvnlook.exe才能取得,我做了個簡單的測試,檔名是 檔案庫目錄/hooks/post-commit.bat:
指令 | 說明 |
set APR_ICONV_PATH=d:svn-win32-1.2.3iconv | 設定語系Locale |
echo %1 %2 >> d:repohookspost.txt | 看Post-commit後傳了那些東西給hook script |
echo ---changed: >> d:repohookspost.txt d:svn-win32-1.2.3binSVNLOOK changed "%1" "%2" >> d:repohookspost.txt |
把異動檔名寫入post.txt |
echo ---date: >> d:repohookspost.txt d:svn-win32-1.2.3binSVNLOOK date "%1" "%2" >> d:repohookspost.txt |
把異動時間寫入post.txt |
echo ---log: >> d:repohookspost.txt d:svn-win32-1.2.3binSVNLOOK log "%1" "%2" >> d:repohookspost.txt |
把commit時輸入的Log訊息寫入post.txt |
echo ---author: >> d:repohookspost.txt d:svn-win32-1.2.3binSVNLOOK author "%1" "%2" >> d:repohookspost.txt |
把作者寫入post.txt |
echo ---youngest: >> d:repohookspost.txt d:svn-win32-1.2.3binSVNLOOK youngest "%1" "%2" >> d:repohookspost.txt |
把最後的異動序號寫入post.txt |
echo ---diff: >> d:repohookspost.txt d:svn-win32-1.2.3binSVNLOOK diff "%1" "%2" >> d:repohookspost.txt |
把差異內容寫入post.txt |
最後再寫一支程式去解析post.txt就可以了。嗯,post.txt的檔名還要再加上可分辨的序號才可以,以防止同時有許多人在Commit。
##
您可能也會有興趣的類似文章
- [Subversion] 修改舊版次的訊息與作者名稱 (0則留言, 2006/07/08)
- CVS轉Subversion (0則留言, 2005/12/21)
- Subversion版本庫匯入Git的步驟與SVN整合步驟 (0則留言, 2014/10/03)
- 試用TortoiseSVN 1.4 RC1–更新 (2則留言, 2006/09/06)
- 搬移Subversion主機的步驟 (0則留言, 2017/12/25)
- TortoiseSVN的命令行操作 (0則留言, 2015/04/03)
- [Subversion] 尋找Subversion Client工具 (0則留言, 2005/09/01)
- Subversion changelist命令行操作 (0則留言, 2013/06/13)
- [Subversion] 可重覆使用的性質設定批次命令 (1則留言, 2006/07/13)
- 初試TortoiseSVN的收穫 (4則留言, 2005/09/16)
- [Subversion] Keywords擴展設定 (2則留言, 2005/09/03)
- 升級Subversion client版本與VisualSVN Server (8則留言, 2008/11/22)
- Subversion與TortoiseSVN釋出新版1.3 (0則留言, 2006/01/05)
- 升級Subversion 1.7 (0則留言, 2012/11/06)
- Subversion權限設定範例說明 (0則留言, 2009/09/09)
Sorry, 很久沒用Google sc…