【问题标题】:Can't fail SVN pre-commit script with Windows server无法使用 Windows 服务器使 SVN 预提交脚本失败
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    之前我说服自己不是这样,但错误实际上是在 Python 脚本中。当我认为“sys.exit(1)”是时,基本上“sys.exit(0)”正在执行。

    下面我稍微改进了之前 .bat 文件的 echo 语句中的 cmets,我可以确认这些确实显示在 TortoiseSVN 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2011-07-31
      • 2018-02-12
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多