Python Can';无法使用Windows server执行SVN预提交脚本
我正在编写一个SVN pre-commit.bat文件,它调用一个Python脚本来查询我们的问题跟踪系统,以确定用户提供的问题跟踪ID是否处于正确的状态(例如“打开”状态)并与正确的项目关联。SVN服务器运行的是Windows(我想是2003服务器-如果有问题,我可以向我们的IT小组咨询…) 问题是我似乎无法使SVN提交失败*;它总是成功的。假设Python脚本正在做它应该做的事情;它调用“sys.exit(1)”表示失败(调用“sys.exit(0)”表示成功)。对于.bat文件,我在这个论坛中改编了一些例子,据说这些例子是有效的,但到目前为止,还没有成功。这是稍微简化的.bat文件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文件,我在这个论
@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管理员交谈过?