<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    svn提交時強制注釋

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    不少開發員提交修改的時候都不寫注釋,導致查看歷史時很費勁,也不太符合規范。有的公司要求每次提交修改時都寫上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、提交文件檢查,過濾不允許提交的文件
    
    作者: 李思杰 <lsj86@qq.com> <2012/04/28>
    """
    
    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

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全