1. 程式人生 > >【SVN】關於鉤子的一些使用

【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指令碼怎麼寫。