Mercurial > hg > mercurial
changeset 386:00d13c910f5d remote-run/exit-code
Some non-zero exit codes mean error
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Thu, 16 Feb 2012 18:20:28 +0400 |
parents | 62f273711a49 |
children | 88480a85f888 |
files | mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java |
diffstat | 2 files changed, 27 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java Wed Feb 15 18:18:11 2012 +0400 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java Thu Feb 16 18:20:28 2012 +0400 @@ -82,11 +82,16 @@ } private boolean isFailure() { - //A non-zero exit code is not an error: + return getException() != null || isErrorExitCode(); + } + + private boolean isErrorExitCode() { + //A non-zero exit code is not always an error: //http://mercurial.selenic.com/bts/issue186 //http://mercurial.selenic.com/bts/issue2189 //E.g. pull command in hg 2.1 exits with 1 if no new changes were pulled - return getException() != null; + int exitCode = myDelegate.getExitCode(); + return exitCode == -1 || exitCode == 255; } private boolean shouldDetectErrors() {
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java Wed Feb 15 18:18:11 2012 +0400 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java Thu Feb 16 18:20:28 2012 +0400 @@ -8,6 +8,7 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.testng.annotations.BeforeMethod; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.ByteArrayInputStream; @@ -38,6 +39,25 @@ myLogger.assertLogMessagesDontContain(password); } + @DataProvider(name = "exitCodesForErrors") + public static Object[][] exitCodesForErrors() { + return new Object[][] { + new Object[] { -1 }, + new Object[] { 255}}; + } + + @Test(expectedExceptions = VcsException.class, + dataProvider = "exitCodesForErrors") + public void should_detect_error_when_for_exit_code(int exitCode) throws VcsException { + CommandResult commandResult = commandResultFor(execResult().withExitCode(exitCode)); + commandResult.checkCommandFailed(); + } + + public void exit_code_of_one_is_not_an_error() throws VcsException { + CommandResult commandResult = commandResultFor(execResult().withStdout("pull: no new changes").withExitCode(1)); + commandResult.checkCommandFailed(); + } + @Test(expectedExceptions = UnrelatedRepositoryException.class) public void should_detect_unrelated_repository_error() throws VcsException { String unrelatedRepositoryStderr = "abort: repository is unrelated\n"; @@ -64,11 +84,6 @@ commandResult.checkCommandFailed(); } - public void should_detect_failure_with_non_zero_exit_code() throws VcsException { - CommandResult commandResult = commandResultFor(execResult().withExitCode(1)); - commandResult.checkCommandFailed(); - } - ExecResultBuilder execResult() { return new ExecResultBuilder();