SVN预提交钩子中的用户验证

时间:2011-11-10 01:58:24

标签: svn pre-commit-hook pre-commit

通过mcdon在SVN pre-commit hook for avoiding changes to tags subdirectories中找到了一个有用的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语句。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

我不明白为什么你需要一个预提交钩子,所以我给你一个草图,我们在处理标签时使用的是什么。

  1. 我们使用Subversion path-based authorization,并有类似的规则:

    [/tags]
    * = r
    @R_SVN_ADMINS = rw
    

    因此只允许管理员创建和修改标签。

  2. 如有必要,我们会为每个标记添加一条规则以避免修改:

    [/tags/r1.0]
    @R_SVN_ADMINS = r
    
  3. 另一种解决方案是在创建后的第一个点修改规则,这样标记只能是只读的。
  4. 这对我们有用,因为标签很少被创建,我们没有太多。我们不需要任何钩子来禁止某些事情......

答案 1 :(得分: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