強制要求輸入送交說明的 Subversion Hook

剛用 C# 寫了一個 Subversion pre-commit hook,這個小工具能夠在開發人員執行 Subversion 送交命令時檢查是否有輸入送交說明(log message),如果沒輸入的話,就告訴 Subversion server 停止 commit 動作,並傳回錯誤訊息給用戶端,例如:


有時候,程式設計師在送交檔案時可能會忘記輸入 log message,或者根本沒有這個習慣,這樣的話,萬一將來哪天要回復到舊版本,就很難判斷究竟該回復到哪個 revision 了。希望這個小工具能夠改善此情況,讓開發人員養成每次送交檔案時輸入修改摘要的習慣。

使用方法

http://svntools.codeplex.com/ 的 Downloads 頁面下載 ChkCommitMsg-bin-v0.1.zip。將檔案解壓縮後,再依 README.txt 中的指示進行部署即可。

一點提醒:目前這個版本沒辦法讓你指定哪些資料夾才要強制輸入送交說明,也就是說,任何送交至檔案庫的動作都必須輸入 log message。如果你需要這個功能,可下載完整原始碼回去自行修改。

我在 Subversion v1.5 和 v1.6 環境上都測過 OK(CollabNet 打包的版本),如果是 Subversion 1.4 或更舊的版本,就不確定是否能正常運作了。

重新發明輪子?

其實在 tigris.org 網站上已經有提供類似的 pre-commit hook 程式,只是它們大部分是以 Perl 或 Python 寫成,如果要寫比較複雜的處理邏輯,還是用自己熟悉的 .NET 語言比較快。比如說,將來可以寫個 post-commit hook,每當送交完成時,檢查送交訊息中是否有 Issue Number,有的話,就直接傳遞訊息給 issue tracking system,以修改該問題的狀態(改為「已完成」或「待測試」);或者可以寫個工具,將某個日期範圍或 revision 編號範圍內的送交說明取出來,產生更新至 production 環境的批次指令--這持續整合的工作如果都依賴人工手動進行,不僅瑣碎、無趣,而且容易出錯。

2 則留言:

  1. 請問您提到『可以寫個工具,將某個日期範圍或 revision 編號範圍內的送交說明取出來,產生更新至 production 環境的批次指令』...
    這要怎麼做呢? 是否能再說明細節?
    目前我就遇到人工作業的狀況 >_<
    感謝~~~

    回覆刪除
  2. 我的想法是用 svn log 命令取得指定 revision 的送交內容,並剖析此內容,取出送交的檔案名稱,之後再產生更新至 production 環境的批次指令。
    原本我是想寫出來後,將原始碼放到 CodePlex 上,看看是不是也有人需要這類工具。只不過,到目前卻一直沒有真正騰出時間把這個想法實作出來 @_@|||

    回覆刪除

技術提供:Blogger.
回頂端⬆️