【问题标题】:Mercurial preoutgoing hook succeeds when a build fails当构建失败时,Mercurial preoutgoing hook 成功
【发布时间】:2013-07-25 19:37:25
【问题描述】:

我有一个非常基本的带有代码的 bat 文件(如下)

@echo off


%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\msbuild CaptainHook.sln /m /nr:false /p:Platform="Any CPU" /v:M /fl /flp:LogFile=bin\msbuild.log;Verbosity=Normal
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\msbuild Tests.sln /m /nr:false /p:Platform="Any CPU" /v:M /fl /flp:LogFile=bin\msbuild.log;Verbosity=Normal
"%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe" /testcontainer:%CD%\src\UnitTests\bin\Debug\UnitTests.dll" 

我可以将它作为 preoutgoing.build_test 钩子执行,但是即使构建失败,提交也不会中止,但如果测试失败,提交也会中止。我错过了什么?

【问题讨论】:

    标签: batch-file mercurial msbuild mstest mercurial-hook


    【解决方案1】:

    您在构建之后无条件地运行测试。如果最后执行的命令返回零退出代码,那么它将覆盖之前命令中的任何非零退出代码。

    因此您需要检查每个命令之间的退出代码(Windows 批处理中的 ERRORLEVEL),如果非零则退出。或者,如果您想在构建失败的情况下运行测试,请保存退出代码并在最后退出。

    立即退出:

    @ECHO OFF
    
    %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\msbuild CaptainHook.sln /m /nr:false /p:Platform="Any CPU" /v:M /fl /flp:LogFile=bin\msbuild.log;Verbosity=Normal
    IF ERRORLEVEL 1 GOTO :EOF
    
    %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\msbuild Tests.sln /m /nr:false /p:Platform="Any CPU" /v:M /fl /flp:LogFile=bin\msbuild.log;Verbosity=Normal
    IF ERRORLEVEL 1 GOTO :EOF
    
    "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe" /testcontainer:%CD%\src\UnitTests\bin\Debug\UnitTests.dll"
    IF ERRORLEVEL 1 GOTO :EOF
    

    (末尾的额外行可以轻松添加更多命令)。

    执行所有并以最高错误级别退出:

    @ECHO OFF
    
    SETLOCAL
    SET EXITCODE=0
    
    %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\msbuild CaptainHook.sln /m /nr:false /p:Platform="Any CPU" /v:M /fl /flp:LogFile=bin\msbuild.log;Verbosity=Normal
    IF %ERRORLEVEL% GTR %EXITCODE% SET EXITCODE=%ERRORLEVEL%
    
    %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\msbuild Tests.sln /m /nr:false /p:Platform="Any CPU" /v:M /fl /flp:LogFile=bin\msbuild.log;Verbosity=Normal
    IF %ERRORLEVEL% GTR %EXITCODE% SET EXITCODE=%ERRORLEVEL%
    
    "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe" /testcontainer:%CD%\src\UnitTests\bin\Debug\UnitTests.dll"
    IF %ERRORLEVEL% GTR %EXITCODE% SET EXITCODE=%ERRORLEVEL%
    
    EXIT /B %EXITCODE%
    

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      相关资源
      最近更新 更多