【SVN】關於鉤子的一些使用
阿新 • • 發佈:2018-12-09
前一段時間,李總讓我研究一下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指令碼怎麼寫。