svn提交强制注释并限制格式
继上一篇文章svn hook+python实现commit后自动发送邮件后,开发负责人看到每天发的邮件里,很多人写的格式乱七八糟的,今天过来给我说要求限制下大家的格式.好吧,下面来看看在服务器上怎么弄的.
其实都是修改%svnhome%/hooks/pre-commit 这个文件.
1.windows里进行限制的方式:
@echo off setlocal set SVN_BINDIR=C:/Program Files/Subversion/bin/ set REPOS=%1 set TXN=%2 rem check that logmessage contains at least 10 characters svnlook log "%REPOS%" -t "%TXN%" | findstr "....." > nul svnlook log "%REPOS%" -t "%TXN%" | findstr "更新人" > nul svnlook log "%REPOS%" -t "%TXN%" | findstr "更新模块" > nul svnlook log "%REPOS%" -t "%TXN%" | findstr "更新内容" > nul endlocal if %errorlevel% gtr 0 goto err exit 0 :err echo 请填写Log!!!日志格式具体如下: 1>&2 echo 更新人: 1>&2 echo 更新模块: 1>&2 echo 更新内容: 1>&2 exit 1
2.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
cmdPrefix = "env LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8"
badlist = (".*/php/cache","^.*\.db$")
message = "".join(os.popen("%s /usr/bin/svnlook log '%s' -t '%s'" % (cmdPrefix, 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)
messageLines = message.splitlines()
lineCount = len(messageLines)
if (lineCount < 2):
sys.stderr.write("请注意日志格式:至少两行");
sys.exit(1)
else:
line1 = messageLines[0]
if (line1.startswith("更新模块") == False):
#if (line1.startswith("module") == False):
#sys.stderr.write("请注意日志格式:必须以[更新模块:]开始");
sys.stderr.write(line1+"请注意日志格式:必须以[更新模块:]开始");
sys.exit(1)
hasUpdateContent = False
for i in range(1, lineCount):
lineTemp = messageLines[i]
if (lineTemp.startswith("更新内容") == True):
#if (lineTemp.startswith("content") == True):
hasUpdateContent = True
break
if (hasUpdateContent == False):
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:])
保存后就可以在windows的小乌龟客户端里进行测试了.
ps:
windows服务端里的格式是三行,linux服务端里的格式是两行,具体你们要限制几行可以自己进行修改.


评论: