0

コードを含む非常に基本的なバットファイルがあります(以下)

@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 フックとして実行することはできますが、ビルドが失敗してもコミットは中止されませんが、テストが失敗するとコミットは中止されます。何が欠けていますか?

4

1 に答える 1

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%
于 2013-07-25T21:50:38.307 に答える