一、svn hook机制
svn的hook机制,跟其他很多类似的工具一样,hook机制的本身就是在某个具体的时机所触发的内容,类似于事件驱动的回调。
举个简单的例子,我们使用svn commit的时候如果希望对日志的信息进行判断,如果日志中没有包含指定格式的Ticket号时,提示相关的错误信息,不允许提交。这样的场景,就是hook机制起作用的最为常见的情形之一。这篇文章中会用最简单的方式来演示这个机制的设定和使用方式。
二、svn的hook模板
在创建的svn的仓库中,目前默认包含了如下9种hook的版本
start-commit
pre-commit
post-commit
pre-revprop-change
post-revprop-change
pre-lock
post-lock
pre-unlock
post-unlock
在安装的apache的服务器中,可以查看模板。
[root@iZm5eetbb1qeqn5t6ynbyiZ svn]# ls
authz passwd test touch
[root@iZm5eetbb1qeqn5t6ynbyiZ svn]#
[root@iZm5eetbb1qeqn5t6ynbyiZ svn]#
[root@iZm5eetbb1qeqn5t6ynbyiZ svn]#
[root@iZm5eetbb1qeqn5t6ynbyiZ svn]# cd test/
[root@iZm5eetbb1qeqn5t6ynbyiZ test]# ls
conf dav db format hooks locks README.txt
[root@iZm5eetbb1qeqn5t6ynbyiZ test]# cd hooks/
[root@iZm5eetbb1qeqn5t6ynbyiZ hooks]# ls
post-commit.tmpl post-revprop-change.tmpl pre-commit.tmpl pre-revprop-change.tmpl start-commit.tmpl
post-lock.tmpl post-unlock.tmpl pre-lock.tmpl pre-unlock.tmpl
[root@iZm5eetbb1qeqn5t6ynbyiZ hooks]#
三、hook说明
svn 9种相关的hook所触发的时机相关的信息如下
四、hook参数
当前版本的hook的相关参数信息如下所示:
五、起效方式
缺省创建的库中的9个文件均以tmpl结尾,而这样是不起作用的,在Unix/Linux下,删除tmpl的后缀才能起作用,而windows则需要将.tmpl改成.bat。
修改之后立即起效,无需重新启动svn服务。
在pre-commit中主要做校验用到的命令是svnlook命令,看下svnlook命令
[root@iZm5eetbb1qeqn5t6ynbyiZ tmp]# /usr/bin/svnlook help
general usage: svnlook SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]
Note: any subcommand which takes the '--revision' and '--transaction'
options will, if invoked without one of those options, act on
the repository's youngest revision.
Type 'svnlook help <subcommand>' for help on a specific subcommand.
Type 'svnlook --version' to see the program version and FS modules.
Available subcommands:
author
cat
changed
date
diff
dirs-changed
filesize
help (?, h)
history
info
lock
log
propget (pget, pg)
proplist (plist, pl)
tree
uuid
youngest
5.1 Linux脚本实现检测代码中是否含有非法字符
首先执行以下命令
mv pre-commit.tmpl pre-commit
chmod +x pre-commit
#!/bin/sh
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
LOGMSG=`$SVNLOOK diff -t "$TXN" "$REPOS" | grep "error_log" | wc -L`
if [ "$LOGMSG" -ge 0 ];
then
echo -e "commit error_log refused" 1>&2
exit 1
fi
5.2 校验提交log字符数量
#!/bin/sh
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 5 ];
then
echo -e "nLog message cann't be empty! you must input more than 5 chars as comment!." 1>&2
exit 1
fi
————————————————
版权声明:本文为CSDN博主「liumiaocn」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liumiaocn/article/details/81942161