2011-11-10 25 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