不少開發(fā)員提交修改的時(shí)候都不寫注釋,導(dǎo)致查看歷史時(shí)很費(fèi)勁,也不太符合規(guī)范。有的公司要求每次提交修改時(shí)都寫上bug號(hào)或者任務(wù)描述,那么如何在工具上防止開發(fā)員們不寫注釋呢?
利用svn的pre-commit鉤子可簡單實(shí)現(xiàn)此要求。
進(jìn)入倉庫project1/hooks目錄,找到pre-commit.tmpl文件,重命名,去掉后綴.tmpl。
編輯pre-commit文件:(Linux系統(tǒng)和windows系統(tǒng)腳本內(nèi)容見1和2)
1、Linux系統(tǒng)
方法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
這三行注釋掉(前面加#符號(hào)),
在此位置添加如下幾行:
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 5 ];#要求注釋不能少于5個(gè)字符,您可自定義
then
echo -e "
Log message cann't be empty! you must input more than 5 chars as comment!." 1>&2
exit 1
fi
保存,退出。
給pre-commit添加可執(zhí)行權(quán)限:
chmod +x pre-commit
配置結(jié)束,可以使用了。
方法2:
這兩天把項(xiàng)目的開發(fā)機(jī)遷移到了linux環(huán)境,用python重寫了原來的svn hook,保存為pre-commit放到svn的hooks目錄下,chmod +x pre-commit加上執(zhí)行權(quán)限即可。windows下寫SVN鉤子比較麻煩,只能是批處理或者exe,linux下隨便用什么腳本語言寫都可以,只要加上可執(zhí)行權(quán)限行了。
#! /usr/bin/env python # -*- coding: utf-8 -*- """ SVN提交前檢查鉤子 功能: 1、強(qiáng)制填寫提交注釋,內(nèi)容10字節(jié)以上 2、強(qiáng)制注釋格式為: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("請(qǐng)輸入本次提交的修改內(nèi)容,10字節(jié)以上。"); sys.exit(1) if message.find(':') < 1: sys.stderr.write("請(qǐng)按規(guī)范填寫注釋,格式為:功能名: 修改說明。"); 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("請(qǐng)不要把 %s 加入版本庫。" % line[1:].strip()); sys.exit(1) sys.exit(0) if __name__ == "__main__": main(sys.argv[1:])
2、windows強(qiáng)制注釋腳本
@echo off
setlocal
set REPOS=%1
set TXN=%2
rem 保證輸入8個(gè)字符
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 請(qǐng)補(bǔ)充日志說明信息后再提交代碼,例如:功能說明等. >&2
echo 輸入的日志信息不少于8個(gè)字符說明(或4個(gè)漢字),謝謝! >&2
echo *******************禁止空格數(shù)據(jù)***************** >&2
goto :err_exit
:err_exit
exit 1
:success
exit 0