【SVN】关于钩子的一些使用

前一段时间,李总让我研究一下SVN钩子的使用,以前没接触过这方面东西,在这里记录一下。

何为钩子?

所谓SVN钩子就是一些与版本库事件发生时触发的程序,例如新修订版本的创建,或者是未版本化属性的修改。目前subversion提供了如下几种钩子:post-commit、post-lock、post-revprop-change、post-unlock、pre-commit、pre-lock、pre-revprop-change、pre-unlock、start-commit
我们随便打开一个hooks目录,就可以看到:
这里写图片描述

利用钩子,实现限制上传文件的大小功能:

在仓库hooks目录下,编辑pre-commit脚本文件,内容如下:

#!/bin/bash
REPOS="$1"     #仓库的路径
TXN="$2"       #本次事务的一个事务号,如果提交成功则返回0,否则返回非0结果
SVNLOOK=/usr/bin/svnlook   
MAX_SIZE=512000     #限制上传文件的大小

files=$($SVNLOOK changed -t $TXN $REPOS | awk '{print $2}')

# check check 
if [[ $files =~ "project_nuli" ]];then
for f in $files
do
    # check file size
    filesize=$($SVNLOOK cat -t $TXN $REPOS $f | wc -c)
    if [ $filesize -gt $MAX_SIZE ] ; then
        echo "File $f is too large (must <= $MAX_SIZE)" >> /dev/stderr
        exit 1
    fi
done
fi
exit 0

客户端提交大于500K文件会返回 File $f is too large (must <= $MAX_SIZE)

利用钩子,实现限制上传文件的类型:

在仓库hooks目录下,编辑pre-commit脚本文件,内容如下:

#!/bin/bash
REPOS="$1"     #仓库的路径
TXN="$2"       #本次事务的一个事务号,如果提交成功则返回0,否则返回非0结果
SVNLOOK=/usr/bin/svnlook 
FILTER='\.(zip|rar|o|ibj|tar|gz)$'    #限制扩展名

files=$($SVNLOOK changed -t $TXN $REPOS |cut -d "" -f 4-)
#echo "$files" >&2
#echo "$r" >&2
#exit 1

rc=0
echo "$files"|while read f;
do
#check file type
if echo $f |tr A-Z a-z|grep -Eq $FILTER;
then
        echo "File $f is not allow ($FILTER) file" >&2
        exit 1;
fi
done
exit 0

最后,等这段时间忙过去了,得去学学Shell脚本怎么写。

posted @ 2018-09-15 09:42  郑璐璐  阅读(480)  评论(0编辑  收藏  举报