2011-11-10 24 views
0

找到mcdon中SVN pre-commit hook for avoiding changes to tags subdirectories有用的SVN預先掛鉤鉤子之一。用戶在SVN預驗證鉤子中驗證

我想在提交之前在用戶上添加驗證檢查。我可以做下面的事嗎?

@echo off 
REM user1, user2, user3 are example 
set VALID_USERS=user1,user2,user3 

set SVNROOT="C:\Program Files\CollabNet Subversion Server\svnlook.exe" 
set REPOS=%1% 
set TXN=%2% 

%SVNROOT% author %REPOS% -t %TXN% | findstr /r "^%VALID_USERS%$" >nul 
if %errorlevel% EQU 0 (
    echo This is an invalid user 1>&2 
    exit 1 
) else (
    echo This is valid user 1>&2 
    exit 0 
) 

上述預提交腳本失敗,因爲所有用戶都可以提交自己的文件。另外,'echo'命令不起作用,因爲我沒有看到上面的任何echo語句。誰能幫忙?

回答

1

我不明白爲什麼你應該想要一個預先提交的鉤子,所以我給你一個草圖,當我們使用標籤時,我們正在使用什麼。

  1. 我們使用Subversion的path-based authorization,並有規則類似:

    [/tags] 
    * = r 
    @R_SVN_ADMINS = rw 
    

    所以只有管理員被允許創建和修改標籤。

  2. 如果有必要,我們增加對每個標籤的規則,以避免修改:

    [/tags/r1.0] 
    @R_SVN_ADMINS = r 
    
  3. 另一種解決方案是修改創建後的第一個點的規則,使標記爲只讀只。

這對我們很有用,因爲標籤很少創建,我們沒有太多。我們不需要任何掛鉤禁止的東西......

+0

感謝mliebelt您的答覆。我想過使用pre-commit hook來限制用戶刪除/ trunk目錄中的文件/文件夾。 – tanlccc

+0

然後,你應該改寫你的問題(也許標題)告訴人們你的問題...... – mliebelt

+0

@ mliebelt,上述授權是否也適用於基於LDAP的身份驗證?我的意思是,LDAP中的用戶可以訪問回購站,但無法爲所有用戶設置讀取和寫入權限。我無法使用「限制」,因爲在LDAP中沒有創建組。請建議。 – anand

0

發現了以下解決方案的工作:

REM  Block deletion of folder/file in trunk 
%SVNLOOK% changed %REPOS% -t %TXN% | findstr /r "^D.*trunk/.*$" >nul 
if %errorlevel%==0 (goto DeleteInTrunkError) 

REM  DeleteInTrunkError 
REM ------------------------ 
:DeleteTrunkTagsError 
echo. 1>&2 
echo Trunk Delete Error: 1>&2 
echo  Only Administrator can delete in the trunk folder. 1>&2 
echo Commit details: 1>&2 
%SVNROOT% changed %REPOS% -t %TXN% 1>&2 
exit 1