Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';无法使用Windows server执行SVN预提交脚本_Python_Svn_Batch File_Pre Commit Hook_Pre Commit - Fatal编程技术网

Python Can';无法使用Windows server执行SVN预提交脚本

Python Can';无法使用Windows server执行SVN预提交脚本,python,svn,batch-file,pre-commit-hook,pre-commit,Python,Svn,Batch File,Pre Commit Hook,Pre Commit,我正在编写一个SVN pre-commit.bat文件,它调用一个Python脚本来查询我们的问题跟踪系统,以确定用户提供的问题跟踪ID是否处于正确的状态(例如“打开”状态)并与正确的项目关联。SVN服务器运行的是Windows(我想是2003服务器-如果有问题,我可以向我们的IT小组咨询…) 问题是我似乎无法使SVN提交失败*;它总是成功的。假设Python脚本正在做它应该做的事情;它调用“sys.exit(1)”表示失败(调用“sys.exit(0)”表示成功)。对于.bat文件,我在这个论

我正在编写一个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)
code。另外,我很确定'err'函数正在运行,只是SVN忽略了“exit 1”返回代码

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


感谢您的关注。

尝试将
退出1
更改为
退出/b1
<代码>退出将退出命令解释器(cmd.exe)<代码>退出/b将退出当前批处理脚本,但不会退出命令解释器


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

感谢您的建议,但我已找到解决方案

早些时候,我说服自己不要这样做,但事实上,错误在Python脚本中。实际上,“sys.exit(0)”正在执行,而我认为“sys.exit(1)”正在执行

下面我稍微改进了上一个.bat文件中echo语句中的注释,并且我可以确认这些注释确实显示在TurtoiseSVN GUI窗口中

\Python26\python svn_sync.py -s --repos=%repos% --transaction=%transaction% --project=%proj%   

IF %ERRORLEVEL% GTR 0 GOTO err 

echo ___________________ 1>&2  
echo Commit successful.  1>&2  
echo ___________________ 1>&2  
exit 0 

:err
echo _____________________________________________________ 1>&2  
echo Your commit has failed due to invalid PR or PR state. 1>&2  
echo _____________________________________________________ 1>&2  
exit 1

为了完全排除Python脚本和“err”函数,我让pre-commit.bat文件包含一行“exit 1”,并且提交仍然成功。您是否与(以前的)SVN管理员交谈过?