继上一篇文章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服务端里的格式是两行,具体你们要限制几行可以自己进行修改.
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-752.html