【发布时间】:2012-04-16 02:35:45
【问题描述】:
我正在编写一个 SVN pre-commit.bat 文件,该文件调用 Python 脚本来查询我们的问题跟踪系统,以确定用户提供的问题跟踪 ID 是否处于正确状态(例如“打开”状态)并关联与正确的项目。 SVN 服务器正在运行 Windows(我认为是 2003 服务器 - 如果有问题,我可以咨询我们的 IT 小组......)。
问题是我似乎无法使 SVN 提交失败*;它总是成功的。 AFAIK 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 脚本出现运行时错误。但是,在这种情况下,故意生成运行时错误不是可接受的解决方法。
感谢您的关注。
【问题讨论】:
-
为了完全排除Python脚本和“err”功能,我在pre-commit.bat文件中设置了一行“exit 1”,提交依然成功。
-
你和你的(以前的)SVN管理员谈过了吗?
标签: python svn batch-file pre-commit-hook pre-commit