[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。

##

您可能也會有興趣的類似文章

填寫回應

 

 

 

您可使用這些HTML標籤

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

隨機文章

  1. 用tag2find幫你的文件隨處貼標籤 (2)
  2. [2011/05/07 長灘島之旅第四天] 東岸沙灘與海鮮大餐 
  3. WordPress減肥記:壓縮JavaScript檔的大小 (6)
  4. 一眼瞬間!用Switcher切換工作視窗 (2)
  5. 使用Markdown on Save外掛完美解決Markdown與HTML格式並存狀況 
  6. 關閉所有視窗的小工具:CloseAll.exe (2)
  7. [Vista] 把桌面行事曆Rainlendar鎖定在Vista桌面上 
  8. [FireFox] 無法使用Copy / Paste的原因 (4)
  9. [Tools] Qm: The Quick Mailer (2)
  10. [Tools] 用7-Zip取代PKZipC (1)

歷史熱門文章

  1. 如何手動輸入Plurk的表情圖示? (352,905 點擊/2008-09-29)
  2. 簡單放大Plurk輸入區的方法[修訂] (86,911 點擊/2008-09-29)
  3. 啟用&關閉中華電信ZyXEL P874的無線網路連線功能的步驟[修訂] (83,706 點擊/2011-06-01)
  4. Plurk CSS樣式自訂修改全攻略 (83,031 點擊/2009-07-04)
  5. 網路升級光世代50M/3M與設定ZyXEL P874 (53,126 點擊/2011-05-28)
  6. 輕鬆學會彈指神功-揭露AutoHotkey絕技 (43,110 點擊/2008-04-10)
  7. iPad新手入門技巧 (40,343 點擊/2011-02-05)
  8. 分享世博台灣館主題曲『台灣的心跳聲』MV(附歌詞+下載連結+新歌詞) (38,131 點擊/2010-04-27)
  9. 把HTC Touch HD操作介面換成Spb Mobile Shell,美觀又便利! (37,943 點擊/2009-02-18)
  10. 另一套適用手機的影片轉檔工具:WinAVI 3GP/MP4/PSP/iPod Video Converter (35,893 點擊/2009-04-18)