1. 程式人生 > >SVN提交強制寫入註釋及相關擴展閱讀

SVN提交強制寫入註釋及相關擴展閱讀

svn hook 註釋

假設SVN已經搭建成功,版本庫根目錄為/opt/svn/repos

找到版本庫下面./hook/目錄,一共9個文件,簡單介紹一下


文件說明
1pre-commit.tmpl提交之前被執行
2pre-lock.tmpl版本庫鎖定之前被執行
3pre-revprop-change.tmpl版本庫增刪改之前被執行
4pre-unlock.tmpl版本庫解除鎖定之前被執行
5post-commit.tmpl提交之後被執行
6post-lock.tmpl版本庫鎖定之後被執行
7post-revprop-change.tmpl版本庫增刪改之後被執行
8post-unlock.tmpl版本庫解除鎖定之後被執行
9start-commit.tmpl提交之前被執行

其中start-commit和pre-commit的區別在於:

start-commit在提交事務發生之前執行,通常用於判斷用戶是否擁有提交權限.

pre-commit在提交事務執行完之前執行,通常用於保護版本庫的內容或者文件位置.


本文只涉及提交註釋的控制,只針對pre-commit進行說明,其他的腳本將不在本文進行說明

原pre-commit.tmpl文件中起作用的部分

REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" |    grep "[a-zA-Z0-9]" > /dev/null || exit 1

該腳本接受2個參數

REPOS="$1" /opt/svn/repos 表示svn倉庫的絕對路徑值

TXN="$2" 表示最新的一個版本的事務ID,不是版本號


註:如果想按照版本號進行查看執行一下命令

svnlook log -r $ID /opt/svn/repos/

svnlook在這裏的作用是打印本次提交的註釋(svnlook log)並且查找其中的字母和數字(grep "[a-zA-Z0-9]"),但是不進行輸出(> /dev/null),如果執行失敗進行異常退出(exit 1)


接下來,我們對這個鉤子進行改造,改造部分的腳本如下:

SVNLOOK=/usr/bin/svnlook
# anothor way
# LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c`
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | wc -c)
if [ "$LOGMSG" -lt 10 ]; then
echo -e "\n 提交文件時必須添加註釋,提交中止." 1>&2
exit 1
fi

其中LOGMSG為註釋的長度

這裏去掉了查找(grep)條件,接受中文註釋,如果需要對註釋進行過濾再計算長度可以將查找添加回來

LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c)

wc命令: -c 統計字節數 -l 統計行數 -w 統計字數(一個單詞算一個字)

判斷: -eq 等於 -gt 大於 -lt 小於

echo 錯誤提示重定向到stderr (0:stdin 1:stdout 2:stderr)


保存鉤子後需要給文件賦予執行權限 chmod 755 pre-commit.tmpl

本文出自 “沙羅雙樹園” 博客,請務必保留此出處http://ohmmx.blog.51cto.com/12884864/1923700

SVN提交強制寫入註釋及相關擴展閱讀