允許用戶修改svn日誌的鉤子腳本

我想用過Subversion的人一定有過這樣的問題:“爲什麼不允許用戶修改日誌?”,因爲這種改變不可還原(目前這個操作還沒有受到版本控制的管理),所以這項功能默認是被禁止的。如果要開啓它,必須設置一個pre-revprop-change鉤子。

版本庫生成後,hooks目錄下就存在一些鉤子腳本的模板,用戶可以作爲參考。這裏我們可以把已經存在的pre-revprop-change.tmpl複製一份,將複製後的文件名改爲pre-revprop-change.bat,鉤子就設置好了。注意Windows下鉤子腳本必須以.bat或者.exe的擴展名形式存在。

默認的鉤子模板使用的是linux下的腳本語言,不能在Windows下運行。所以我們必須重寫,這裏介紹用批處理文件來寫鉤子腳本的方法。最簡單的允許修改日誌的pre-revprop-change.bat連一行都不需要,直接把pre-revprop-change.bat的內容清空就行了,因爲按照Subversion的約定,鉤子腳本返回0就是允許修改任何屬性。(關於鉤子腳本的約定可參考這篇文章http://blog.donews.com/foxgem/archive/2005/11/03/613854.aspx

但是假如我們希望作些判斷,比如只允許修改日誌,而不允許修改用戶名或者其他屬性,那麼下面是一個範例:

SET REPOS="%1"
SET REV="%2"
SET USER="%3"
SET PROPNAME="%4"
SET ACTION="%5"

IF %ACTION% == "M" (IF %PROPNAME% == "svn:log" (EXIT 0))

ECHO "Changing revision properties %PROPNAME% is prohibited" >&2
EXIT 1

利用Subversion的一個程序svnlook,腳本中可以訪問的信息就不僅僅只有傳遞進來的5個參數了,從而可以實現更多的功能。比如判斷修改日誌的用戶是不是以前進行提交的那個作者,如果不是就不允許修改。

只允許用戶修改自己的svn日誌的鉤子腳本:

for /"usebackq" %%k in (`svnlook author %1 -r%2`) do @set var=%%k

if "%3" == "%var%" goto test
if "%3" == "li"    goto test
exit 1

:test
if "%4" == "svn:log" exit 0
echo Property '%4' cannot be changed >&2
exit 1

實現每人可以修改自己的log日誌,而管理員li可以任意修改。這個例子是從網上摘抄來的,因爲手頭上缺少svnlook,所以沒有進行測試。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章