Skip to main content
 首页 » 编程设计

python之不能使 SVN 预提交脚本与 Windows 服务器失败

2025年05月04日17lovecherry

我正在编写一个 SVN pre-commit.bat 文件,它调用 Python 脚本来查询我们的问题跟踪系统,以确定用户提供的问题跟踪 ID 是否处于正确状态(例如“打开”状态)和关联与正确的项目。 SVN 服务器运行的是 Windows(我认为是 2003 服务器——如果有问题,我可以咨询我们的 IT 组……)。

问题是我似乎无法使 SVN 提交失败*;它总是成功的。据我所知,Python 脚本正在做它应该做的事情;失败时调用“sys.exit(1)”(成功时调用“sys.exit(0)”)。对于 .bat 文件,我在这个论坛中改编了一些据说可以工作的例子,但到目前为止,运气不好。这是稍微简化的 .bat 文件,

@echo off 
 
set repos=%1  
set transaction=%2  
set proj=ferry 
 
\Python26\python svn_sync.py -s --repos=%repos% --transaction=%transaction% --project=%proj%  
 
IF %ERRORLEVEL% GTR 0 (GOTO err) else exit 0  
 
REM This should return a failure to Subversion, but does not 
:err 
 echo 1>&2   
 echo Your commit has failed due to invalid PR or PR state. 1>&2   
 echo Thanks 1>&2 
exit 1 

我再次知道脚本正在运行(即不是服务器上的环境变量问题),并且 sys.exit(1) 代码正在被命中。此外,我非常确定“err”函数正在运行,只是“exit 1”返回码被 SVN 忽略了吗?

*注意:不完全正确;我曾经使提交失败的唯一方法是 Python 脚本出现运行时错误。但是,在这种情况下,故意生成运行时错误不是可接受的解决方法。

感谢您的关注。

请您参考如下方法:

尝试将 exit 1 更改为 exit/b 1。 exit 将退出命令解释器(cmd.exe); exit/b 将退出当前的批处理脚本,但不会退出命令解释器。

exit 1 可能正在关闭运行预提交脚本的命令解释器,因此如果 SVN 也在同一命令解释器下运行,则退出代码对 SVN 不可用。