淺談svn的hook機制


一、什么是鈎子

所謂svn的hook機制,就是用戶在管理數據倉庫的時候,當特定的事件發生時,相應的hook會被調用,hook 其實就相當於特定事件的處理函數。

當前 Subversion 提供了5種可以安裝的 hook :

事件名

時機

與hook交互

一般用途

start-commit

事務創建之前。

傳給 hook 的 參數:

-         參 數 1 , 代碼庫路徑。

-         參 數 2 , 試圖提交的用戶名。

hook 的返回值:非 0 則 終止。

判斷用戶是否有權限進行提交 操作。

pre-commit

事務完成,但未提交。

-         參 數 1 , 代碼庫路徑。

-         參 數 2 , 事務名。

hook 的返回值:非 0 則 終止提交,操作回滾。

對提交內容進行檢查。如要求 提交必須填寫提交信息。

post-commit

事務提交完畢,新的修訂版被 創建。

傳給 hook 的 參數:

-         參 數 1 , 代碼庫路徑。

-         參 數 2 , 剛創建的修訂版號。

hook 的返回值被忽 略。

發送郵件通知,或備份代碼 庫。

pre-revprop-change

修改修訂版屬性(如提交時提 供的信息 message )之前。

由於修訂版屬性一旦修改就會 永久的丟失,除非安裝這個事件的 hook, subversion 的 客戶端不允許遠程修改修訂版屬性。

傳給 hook 的 參數:

-         參 數 1 , 代碼庫路徑。

-         參 數 2 , 要修改的修訂版號。

-         參 數 3 , 操作用戶名。

-         要 修改的屬性。

hook 的返回值:非 0 則 終止。

保存修訂版屬性的改變記錄。

post-revprop-change

修訂版屬性值被修改之后。

如果沒有安裝 pre-revprop-change的 hook , 這個事件的 hook 不會被執行。

傳給 hook 的 參數:

-         參 數 1 , 代碼庫路徑。

-         參 數 2 , 要修改的修訂版號。

-         參 數 3 , 操作用戶名。

-         要 修改的屬性。

hook 的返回值被忽 略。

發送郵件通知。

通常來說在當前倉庫下面的hook目錄,都會存在相應hook文件的模板,要讓相應hook文件起作用,就必須復制當前模板並去掉后面的.tmpl,然后編寫相應的邏輯。

 

二、hook實踐

我們主要想實現兩個hook功能:

  •   用戶提交代碼的時候必須要寫提交信息,而且長度必須大於10
  •   用戶提交完之后更新服務器上面相應的目錄

1. 用戶提交代碼的時候必須要寫提交信息,而且長度必須大於10

這個功能需要實現pre-commit

 1 #!/bin/sh
 2 REPOS="$1"
 3 TXN="$2"
 4 
 5 LOGMSG=`svnlook log -t "$TXN" "$REPOS"|wc -c`
 6 if [ $LOGMSG -lt 10 ]; then
 7     echo $LOGMSG 1>&2
 8     echo -e "\nLog message is too short" 1>&2
 9     exit 1
10 fi
11 # All checks passed, so allow the commit.
12 exit 0

 

2.用戶提交完之后更新服務器上面相應的目錄

在hooks目錄下新增post-commit,並增加可執行權限:

1 REPOS="$1"
2 REV="$2"
3 PROJECT="/root/projects/hello"
4 PASSWD="/root/projects/save/svn_admin"
5 
6 svn update -q $PROJECT --non-interactive --username admin --password `cat $PASSWD`

注意:保存后一定要把文件權限增加可執行權限,不然用戶會出現錯誤。

另外,由於安全原因,Subversion版本庫在一個空環境中執行鈎子腳本—就是沒有任何環境變量,甚至沒有$PATH或%PATH%。由於這個原因,許多管理員會感到很困惑,它們的鈎子腳本手工運行時正常,可在Subversion中卻不能運行。要注意,必須在你的鈎子中設置好環境變量或為你的程序指定好絕對路徑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM