svnperms.py在带有Collabnet Subversion Edge的windows上不工作

svnperms.py在带有Collabnet Subversion Edge的windows上不工作,svn,subversion-edge,Svn,Subversion Edge,我在Windows上安装了Collabnet Subversion Edge v3.3.1。我已经启用了基本访问限制,但这并不能让我灵活地执行以下操作: 1.放弃用户删除文件/文件夹 2.使用通配符指定存储库中的文件级权限 因此,我在谷歌上搜索并找到了svnperms.py以满足我的需求。我按照internet上的说明,为访问限制配置了svnperms.py 我的预提交挂钩如下所示: set REPOS=%1 set TXN=%2 REM "C:\csvn\Python25\python.ex

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

因此,我在谷歌上搜索并找到了svnperms.py以满足我的需求。我按照internet上的说明,为访问限制配置了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\u ws\u edge\a\pom.xml
错误:提交失败(详细信息如下):
错误:提交被预提交挂钩(退出代码1)阻止,输出:
错误:svnlook作者C:\csvn\data\repositories\repos-t5-C
错误:{未被识别为内部或外部命令,
错误:可操作的程序或批处理文件。错误:命令失败:svnlook作者
错误:C:\csvn\data\repositories\repos-t5-C
错误:{未被识别为内部或外部命令,
错误:可操作的程序或批处理文件。
已完成!:

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

我看了之前的一篇文章,其中讨论了类似的问题。但解决方案不符合我的要求。它还提到,svnperms.py在windows上不工作,因为底层的svnlook命令只能在unix上工作。我还碰巧在internet上看到其他文章提到类似的问题,但我无法解释查找使svnperms.py在windows上工作的任何解决方案

有人能帮我吗 1.修复上述错误并在windows或/和上获得svnperms.py工作 2.满足我上述要求的替代解决方案,即能够放弃用户对文件/文件夹的删除,并能够在基于文件的访问限制中使用通配符

谢谢

问候


Sowmya Dass

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

有可能找不到其中一个程序的路径。挂钩从裸环境开始。(甚至未设置路径)

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

-编辑-
你可能想看看这篇文章,它是svnperms的.Net端口


这里还有一些需要检查的内容(与裸环境相关)

我不认为钩子没有找到可执行文件。您的退出代码是
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.
我看到Python脚本的第187行生成了输出
命令failed:svnlook author

这个操作看起来非常简单。创建了一个
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作者C:\csvn\data\repositories\repos-t5-C
在我看来是正确的。
'{'未被识别为内部或外部命令
字符串不应是对
svnlook
命令的响应

我想知道您的系统中是否潜伏着一个Perl版本的
svnlook
。我相信在Windows系统上,
%PATH%
%PATHEXEC%
环境变量没有被调零

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

PATH 1>&2
或者类似于
precommit.bat
脚本的内容。然后,查看在
C:\csvn
中的
svnlook
命令之前,您的系统上是否有另一个
svnlook.bat
可能正在执行

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