0

我在 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)

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

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

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

我查看了一篇关于如何在 Windows 上控制对 SVN 服务器中标签的更改的早期帖子,其中讨论了类似的问题。但该解决方案不符合我的要求。它还提到 svnperms.py 不能在 windows 上运行,因为底层的 svnlook 命令只能在 unix 上运行。我也碰巧在互联网上看到其他提到类似问题的帖子,但我找不到任何解决方案让 svnperms.py 在 Windows 上工作。

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

谢谢 !

问候

索米亚·达斯

4

2 回答 2

1

我不相信钩子没有找到可执行文件。你有一个退出代码1and not 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 行定义的。author在第 #233 行为此类定义了一个方法。第 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命令的响应。

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

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

PATH 1>&2

或类似于precommit.bat脚本的东西。然后,查看svnlook.bat您的系统上是否有另一个可能svnlookC:\csvn.

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

于 2013-05-31T12:48:44.067 回答
0

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

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

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

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

这里还有一点要检查(与裸环境有关)设置svnperms pre-commit hook

于 2013-05-31T11:04:18.883 回答