Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67506
  • 博文数量: 7
  • 博客积分: 28
  • 博客等级: 民兵
  • 技术积分: 61
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-24 10:29
文章分类
文章存档

2020年(1)

2019年(1)

2018年(1)

2017年(1)

2015年(1)

2012年(1)

2011年(1)

分类: Windows平台

2015-03-25 16:24:45

20150325 by xiao 测试可以的pre-commit.bat放在hooks下面

@echo off 

setlocal

set REPOS=%1

set TXN=%2          

rem 保证输入8个字符 

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 请补充日志说明信息后再提交代码,例如:功能说明等.  >&2

echo 输入的日志信息不少于8个字符说明(4个汉字),谢谢! >&2

echo *******************禁止空格数据***************** >&2

goto :err_exit

:err_exit

exit 1

:success

exit 0

 

英文:

@echo off 

setlocal

set REPOS=%1

set TXN=%2          

rem Ensure that the 8 characters 

svnlook log %REPOS% -t %TXN% | findstr "........" > nul

if %errorlevel% gtr 0 goto :err_action

rem Filter space characters

svnlook log %REPOS% -t %TXN% | findstr /ic:"        " > nul 

if %errorlevel% gtr 0 goto :success   

:err_action

echo You have this version submitted is not complete any change log information>&2

echo Please add log information, and then submit your code, for example: Description of the function, and so on.>&2

echo Enter the log information less than 8 characters (or 4 characters), Thank you!>&2

echo ********The space data for prohibit**** >&2

goto :err_exit

:err_exit

exit 1

:success

exit 0

 

 

Linux未进行验证

http://blog.chinaunix.net/special/show/sid/1387.html

 

  利用svnpre-commit钩子可简单实现此要求。 

进入仓库project1/hooks目录,找到pre-commit.tmpl文件,重命名,去掉后缀.tmpl。 
编辑pre-commit文件:(Linux系统和windows系统脚本内容见12) 

1Linux系统

方法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 
这三行注释掉(前面加#符号), 
在此位置添加如下几行: 

LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` 
if [ "$LOGMSG" -lt 5 ];#要求注释不能少于5个字符,您可自定义 
then 
  echo -e "\nLog message cann't be empty! you must input more than 5 chars as comment!." 1>&2 
  exit 1 
fi 

保存,退出。 
pre-commit添加可执行权限: 
chmod +x pre-commit 
这里记得修改 $SVNLOOK=svnlook的路径,/csvn的安装目录/bin/svnlook) 
配置结束,可以使用了。

 

方法2

这两天把项目的开发机迁移到了linux环境,用python重写了原来的svn hook,保存为pre-commit放到svnhooks目录下,chmod +x pre-commit加上执行权限即可。windows下写SVN钩子比较麻烦,只能是批处理或者exelinux下随便用什么脚本语言写都可以,只要加上可执行权限就行了。

 

#! /usr/bin/env python# -*- coding: utf-8 -*- """SVN提交前检查钩子功能:        1、强制填写提交注释,内容10字节以上        2、强制注释格式为:xxx:xxx        3、提交文件检查,过滤不允许提交的文件 作者: 李思杰  <2012/04/28>""" import sysimport osimport 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("请输入本次提交的修改内容,10字节以上。");                sys.exit(1)        if message.find(':') < 1:                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:])

 

 

阅读(7378) | 评论(0) | 转发(0) |
0

上一篇:svn 用法

下一篇:Linux下安装Git

给主人留下些什么吧!~~