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下,並給執行權限,將提交時如果有符合以上限制,將限制提交。這裏就不作測試,可自行測試,很簡單。

======================
--------------------- 
作者:Jack小火苗 
來源:CSDN 
原文:https://blog.csdn.net/zhanghao143lina/article/details/79588603 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章