使用 svn pre-commit 鉤子規範程式碼提交日誌
阿新 • • 發佈:2020-09-10
目的
- 規範 svn 提交日誌格式,讓每一次提交更慎重;
- 拒絕不填寫日誌的提交;
- 便於日後追溯;
怎麼做
一個新建好的 svn 倉庫目錄如下,可以看到有一個 hooks 的目錄,裡面存放了一些 svn 預設的鉤子指令碼,這次我們需要關注的就是 pre-commit 鉤子。
-
在 hooks 目錄下新建 pre-commit.bat 指令碼,內容如下:
@echo off setlocal set REPOS=%1 set TXN=%2 set SVNLOOK="C:\Program Files\VisualSVN Server\bin" set PYTHON="C:\Program Files\Python35" %SVNLOOK%\svnlook.exe log "%REPOS%" -t "%TXN%" | %PYTHON%\python.exe C:\VisualSVN\check.py > nul if %errorlevel% gtr 0 goto err exit 0 :err echo "Message 格式錯誤,正確格式:Bug|Task #1000 修改描述" 1>&2 exit 1
-
新建 check.py 檔案,內容如下:
import re import sys message = sys.stdin.read() restr = r'^(Bug|Task)\s#\d+\s\w+' if re.match(restr, message) != None: exit(0) else: exit(1)
實現原理其實很簡單,呼叫 svnlook 指令獲取本次提交的日誌內容,判斷是否符合指定格式要求就好了,但是因為 bat 自帶的 findstr 對正則支援不友好,所以這裡又寫了一個 python 的指令碼來對格式進行驗證。然後嘗試不寫日誌提交,就會給出如下提示