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服务端里的格式是两行,具体你们要限制几行可以自己进行修改.
评论: