SVN钩子

先说说钩子是干什么的吧,,简单的说,svn钩子就是在提交svn时前后所要触发的事件,于是我们可以用钩子做一些提交时的限制,及提交后的操作。最常用的一般有两个,pre-commit,post-commit。下面分别简单说下概念。

一、钩子概述

1)start-commit — 开始提交的通知

描述
start-commit 在开始事务之前执行。通常用来确定用户是否有提交权限。
如果 start-commit 钩子程序返回非零值,提交就会在创建事务之前停止,stderr 的任何输出都会返回到客户端。

输入参数
传递给你钩子程序的命令行参数,按照顺序是:

1.版本库路径
2.认证过的尝试提交的用户名
3.Colon-separated list of capabilities that a client passes to the server, including depth, mergeinfo, and log-revprops


2)pre-commit — 在提交结束之前提醒。

描述
pre-commit 钩子在事务创建新版本之前运行。通常这个钩子是用来保护因为内容或位置(例如,你要求所有到一个特定分支的提交必须包括一个 bug 追踪的 ticket 号,或者是要求日志信息不为空)而不允许的提交。
如果 pre-commit 钩子返回非零值,提交会终止,提交事务被删除,所有 stderr 的输出会返回到客户端。 

输入参数
传递给你钩子程序的命令行参数,按照顺序是:

1.版本库路径
2.提交事务的名称

 

3)post-commit — 成功提交的通知。

描述
post-commit 钩子在事务完成,创建新版本后执行。大多数人用这个钩子来发送关于提交的描述性电子邮件,或者用来提醒其它工具(例如问题跟踪),发生了提交动作。一些配置也使用这个钩子触发版本库的备份进程。

如果 post-commit 钩子返回非零值,提交不会终止,因为它已经完成。然后,所有 stderr 的输出都会返回到客户端,让诊断钩子的失败更容易。

输入参数
传递给你钩子程序的命令行参数,按照顺序是:

1.版本库路径
2.提交创建的修订版本号

 

二、pre-commit钩子举例说明

1、此脚本会在提交前对事件进行检查

[root@CentOS_11 test]# cat /svndata/test/hooks/pre-commit 
#!/bin/sh

REPOS="$1"
TXN="$2"
export LANG=en_US.UTF-8                                                           ; export LC_CTYPE=en_US.UTF-8 #设置本地字符集编码
MAX_SIZE=5242880000
FILTER='\.()$'
SVNLOOK=/usr/bin/svnlook
AUTHORS='(tao|wang)'

LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" |wc -c`                     ;  判断输入log的最小字符,小于10个不让提交
if [ $LOGMSG -lt 10 ];then
echo -e "log message can't be empty or less 9 chars as commit!" >&2
exit 1
fi
SVNUSER=`$SVNLOOK author -t "$TXN" "$REPOS"`                        ;  限制提交用户,不是脚本定义的用户不让提交,不过基本svn权限配置文件就够了。
if echo $SVNUSER |/bin/grep -vEq $AUTHORS ;then
echo -e "Sorry you no be author" >&2
exit 1
fi

#定义过滤出当前提交的所以文件内容

File=$($SVNLOOK changed -t $TXN $REPOS|cut -d " " -f 4-)            ;  限制提交文件的类型

 

#对当前提交的所有文件进行循环

echo "$File" |while read f;do

#如果文件被过滤出来就则匹配,输出不允许提交。

if echo $f |tr A-Z a-z|grep -Eq $FILTER;then

echo "File $f is not allow $FILTER file" >&2
exit 1
fi
FilesSize=`$SVNLOOK cat -t "$TXN" "$REPOS" "$f" |wc -c`              ; 限制单个文件提交的大小
if [ "$FilesSize" -gt "$MAX_SIZE" ];then
echo "File $f is too large(must <=$MAX_SIZE)B" >&2
exit 1
fi
done

======================

提示:将以上脚本放到版本库的hooks下,并给执行权限,将提交时如果有符合以上限制,将限制提交。这里就不作测试,可自行测试,很简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值