【问题标题】:svnperms.py does not work on windows with Collabnet Subversion Edgesvnperms.py 在带有 Collabnet Subversion Edge 的 Windows 上不起作用
【发布时间】:2013-05-26 22:29:44
【问题描述】:

我在 Windows 上安装了 Collabnet Subversion Edge v3.3.1。我已经启用了基本访问限制,但这并不能让我灵活地执行以下操作: 1.放弃用户删除文件/文件夹 2. 使用通配符指定存储库中的文件级权限

因此,我搜索并找到了 svnperms.py 以满足我的要求。我按照互联网上的说明配置了 svnperms.py 以限制访问。

我的预提交钩子如下所示:

set REPOS=%1
set TXN=%2

REM "C:\csvn\Python25\python.exe" "C:\csvn\data\repositories\repos\hooks\svnperms.py" -r "%repos%" -t "%txn%" -    f "C:\csvn\data\repositories\repos\hooks\svnperms.conf" 

"C:\csvn\Python25\python.exe" "C:\csvn\data\repositories\repos\hooks\svnperms.py" -  f "C:\csvn\data\repositories\repos\hooks\svnperms.conf" -r "%REPOS%" -t "%TXN%"||exit 1;
exit 0;

我的配置文件是这样的

[groups]
group1 = sowmya.dass
group2 = m.b
[repos]
a/.* = @group1(update)
a/.* = @group2(delete)

我尝试通过让用户 m.b 删除存储库中文件夹 a 下的文件来对此进行测试。由于用户有权访问,他应该能够做到,但是当他尝试提交时我得到以下错误:

命令:提交
删除:C:\m_ws_edge\a\pom.xml
错误:提交失败(详情如下):
错误:提交被预提交挂钩(退出代码 1)阻止,输出:
错误:svnlook 作者 C:\csvn\data\repositories\repos -t 5-c
错误:“{”未被识别为内部或外部命令,
错误:可运行的程序或批处理文件。错误:命令失败:svnlook 作者
错误:C:\csvn\data\repositories\repos -t 5-c
错误:“{”未被识别为内部或外部命令,
错误:可运行的程序或批处理文件。
完成!:

当任何用户尝试执行任何操作时都会出现相同的错误,而不管用户是否已获得访问权限。

我查看了How to control changes to tags in SVN server on Windows 的早期帖子,其中讨论了类似的问题。但该解决方案不符合我的要求。它还提到 svnperms.py 不能在 windows 上运行,因为底层的 svnlook 命令只能在 unix 上运行。我也碰巧在互联网上看到其他提到类似问题的帖子,但我找不到任何解决方案让 svnperms.py 在 Windows 上工作。

任何人都可以帮助我: 1. 修复上述错误并让 svnperms.py 在 windows 或/和 2. 满足我上述要求的替代解决方案,即能够放弃用户对文件/文件夹的删除,并能够在基于文件的访问限制中使用通配符。

谢谢!

问候

苏米亚·达斯

【问题讨论】:

    标签: svn subversion-edge


    【解决方案1】:

    我不相信钩子没有找到可执行文件。您的退出代码是 1 而不是 255

    这是你的钩子传回给你的错误输出:

    svnlook author C:\csvn\data\repositories\repos -t 5-c
    '{' is not recognized as an internal or external command,
    operable program or batch file.error: command failed: svnlook author
    
    C:\csvn\data\repositories\repos -t 5-c
    '{' is not recognized as an internal or external command,
    operable program or batch file.
    

    我看到输出 command failed: svnlook author 是在 Python 脚本的第 187 行生成的。

    操作看起来很简单。创建一个SVNLook 类来执行svnlook 命令。这是在 #174 行定义的。在第 233 行为此类定义了一个 author 方法。第 243 行正在执行此行并查找作者。

    如果svnlook author 没有返回非零状态(第 183 行),则写入命令字符串:

    svnlook author C:\csvn\data\repositories\repos -t 5-c
    

    然后返回错误字符串:

    '{' is not recognized as an internal or external command,
     operable program or batch file.error: 
    

    最后,

    command failed: svnlook author
    

    我不能 100% 确定最后三行的来源。

    svn author C:\csvn\data\repositories\repos -t 5-c 在我看来是正确的。 '{' is not recognized as an internal or external command 字符串不应该是对svnlook 命令的响应。

    我想知道是否有一个 Perl 版本的 svnlook 潜伏在你的系统的某个地方。我相信在 Windows 系统上,%PATH%%PATHEXEC% 环境变量不会被清零。

    查看在执行pre-commit.bat 脚本时是否可以打印出 %PATH%。我认为您需要做的就是添加:

    PATH 1>&2
    

    或类似于precommit.bat 脚本的东西。然后,查看您的系统上是否还有另一个svnlook.bat 可能在C:\csvn 中的svnlook 命令之前执行。

    你也可以试试我的pre-commit钩子脚本。它是用 Perl 编写的,但也使用控制文件来定义权限,并且可以执行您请求的所有操作。我的脚本要求您指定 svnlook 的位置,这将消除您在系统某处执行错误的 svnlook 命令的可能性。

    【讨论】:

      【解决方案2】:

      问题似乎不在你的钩子上。它看起来更像是在 svnperms.py 中。

      可能无法找到其中一个程序的路径。 Hooks 从一个裸露的环境开始。 (甚至没有设置路径)

      这似乎也与 Subversion Edge 无关。挂钩由底层 Subversion“引擎”处理。

      -编辑-
      您可能想查看文章here。它是 svnperms 的 .Net 端口。

      这里还有一些东西要检查(与裸环境有关)Set up svnperms pre-commit hook

      【讨论】:

        猜你喜欢
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多