svn提交時強制注釋


不少開發員提交修改的時候都不寫注釋,導致查看歷史時很費勁,也不太符合規范。有的公司要求每次提交修改時都寫上bug號或者任務描述,那么如何在工具上防止開發員們不寫注釋呢?
  利用svn的pre-commit鈎子可簡單實現此要求。
進入倉庫project1/hooks目錄,找到pre-commit.tmpl文件,重命名,去掉后綴.tmpl。 編輯pre-commit文件:(Linux系統和windows系統腳本內容見1和2)
1、Linux系統

方法1:

將: $SVNLOOK log -t "$TXN" "$REPOS" | \    grep "[a-zA-Z0-9]" > /dev/null || exit 1 commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 這三行注釋掉(前面加#符號), 在此位置添加如下幾行:
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` if [ "$LOGMSG" -lt 5 ];#要求注釋不能少於5個字符,您可自定義 then   echo -e "\nLog message cann't be empty! you must input more than 5 chars as comment!." 1>&2   exit 1 fi
保存,退出。 給pre-commit添加可執行權限: chmod +x pre-commit 這里記得修改 $SVNLOOK=(svnlook的路徑,/csvn的安裝目錄/bin/svnlook) 配置結束,可以使用了。

 

方法2:

這兩天把項目的開發機遷移到了linux環境,用python重寫了原來的svn hook,保存為pre-commit放到svn的hooks目錄下,chmod +x pre-commit加上執行權限即可。windows下寫SVN鈎子比較麻煩,只能是批處理或者exe,linux下隨便用什么腳本語言寫都可以,只要加上可執行權限就行了。

 

#! /usr/bin/env python
# -*- coding: utf-8 -*- 
"""
SVN提交前檢查鈎子
功能:
        1、強制填寫提交注釋,內容10字節以上
        2、強制注釋格式為:xxx:xxx
        3、提交文件檢查,過濾不允許提交的文件


"""

import sys
import os
import re

def main(argv):
        (repos, txn) = argv
        badlist = (".*config\.php$", ".*/php/cache", ".*test", "config\.js$","^.*\.db$")
        message = "".join(os.popen("/usr/bin/svnlook log '%s' -t '%s'" % (repos, txn)).readlines()).strip()
        if len(message) < 10:
                sys.stderr.write("請輸入本次提交的修改內容,10字節以上。");
                sys.exit(1)
        if message.find(':') < 1:
                sys.stderr.write("請按規范填寫注釋,格式為:功能名: 修改說明。");
                sys.exit(1)

        changelist = os.popen("/usr/bin/svnlook changed '%s' -t '%s'" % (repos, txn)).readlines()
        for line in changelist:
                for pattern in badlist:
                        if re.search(pattern, line):
                                sys.stderr.write("請不要把 %s 加入版本庫。" % line[1:].strip());
                                sys.exit(1)
        sys.exit(0)

if __name__ == "__main__":
        main(sys.argv[1:])

 

 2、windows強制注釋腳本

 

@echo off   setlocal 

 set REPOS=%1   set TXN=%2          

 

rem 保證輸入8個字符  svnlook log %REPOS% -t %TXN% | findstr "........" > nul  if %errorlevel% gtr 0 goto :err_action

 

rem 過濾空格字符 svnlook log %REPOS% -t %TXN% | findstr /ic:"        " > nul  if %errorlevel% gtr 0 goto :success    :err_action  echo 你本次版本提交未填寫任何變更的日志說明信息.      >&2  echo 請補充日志說明信息后再提交代碼,例如:功能說明等.  >&2  echo 輸入的日志信息不少於8個字符說明(或4個漢字),謝謝! >&2  echo *******************禁止空格數據***************** >&2

 goto :err_exit

 

:err_exit  exit 1    :success  exit 0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM