SVN提交強制寫入註釋及相關擴展閱讀
假設SVN已經搭建成功,版本庫根目錄為/opt/svn/repos
找到版本庫下面./hook/目錄,一共9個文件,簡單介紹一下
文件 | 說明 | |
1 | pre-commit.tmpl | 提交之前被執行 |
2 | pre-lock.tmpl | 版本庫鎖定之前被執行 |
3 | pre-revprop-change.tmpl | 版本庫增刪改之前被執行 |
4 | pre-unlock.tmpl | 版本庫解除鎖定之前被執行 |
5 | post-commit.tmpl | 提交之後被執行 |
6 | post-lock.tmpl | 版本庫鎖定之後被執行 |
7 | post-revprop-change.tmpl | 版本庫增刪改之後被執行 |
8 | post-unlock.tmpl | 版本庫解除鎖定之後被執行 |
9 | start-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提交強制寫入註釋及相關擴展閱讀