1. 程式人生 > 實用技巧 >使用 svn pre-commit 鉤子規範程式碼提交日誌

使用 svn pre-commit 鉤子規範程式碼提交日誌

目的

  1. 規範 svn 提交日誌格式,讓每一次提交更慎重;
  2. 拒絕不填寫日誌的提交;
  3. 便於日後追溯;

怎麼做

一個新建好的 svn 倉庫目錄如下,可以看到有一個 hooks 的目錄,裡面存放了一些 svn 預設的鉤子指令碼,這次我們需要關注的就是 pre-commit 鉤子。

  1. 在 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
    
  2. 新建 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 的指令碼來對格式進行驗證。然後嘗試不寫日誌提交,就會給出如下提示