svn提交强制注释并限制格式

post by rocdk890 / 2019-1-21 10:57 Monday linux技术
继上一篇文章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

标签: svn linux windows 强制 格式 python 注释 pre-commit

评论: