Mercurial > hg > mercurial
changeset 679:1da36037196d
TW-30905 include stderr into VcsException messages, so it is shown in a build log
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Tue, 26 Nov 2013 15:35:11 +0400 |
parents | fd0c1e91bd46 |
children | feb909e10f22 |
files | mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandSettings.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java |
diffstat | 3 files changed, 38 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java Sun Nov 24 17:22:43 2013 +0100 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java Tue Nov 26 15:35:11 2013 +0400 @@ -170,6 +170,18 @@ private String getExceptionMessage() { StringBuilder message = new StringBuilder(); message.append("'").append(getCommand()).append("' command failed."); + String stderr = getStderr(); + if (!isEmpty(stderr)) { + message.append("\n"); + int limit = mySettings.getExceptionOutputLimit(); + if (stderr.length() < limit || limit == -1) { + message.append("stderr: ").append(stderr); + } else { + if (limit > 4) + message.append("stderr: ").append(StringUtil.truncateStringValueWithDotsAtEnd(stderr, limit)); + message.append("\nSee details in teamcity-vcs.log"); + } + } return message.toString(); }
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandSettings.java Sun Nov 24 17:22:43 2013 +0100 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandSettings.java Tue Nov 26 15:35:11 2013 +0400 @@ -19,6 +19,7 @@ private String myLogLevel = "debug"; private Map<String, String> myHgEnv = new HashMap<String, String>(); private int myLogOutputLimit = -1; + private int myExceptionOutputLimit = 5000; public CommandSettings() { @@ -99,4 +100,12 @@ myLogOutputLimit = logOutputLimit; return this; } + + public int getExceptionOutputLimit() { + return myExceptionOutputLimit; + } + + public void setExceptionOutputLimit(int limit) { + myExceptionOutputLimit = limit; + } }
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java Sun Nov 24 17:22:43 2013 +0100 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java Tue Nov 26 15:35:11 2013 +0400 @@ -101,13 +101,25 @@ public void exception_should_not_contain_command_stdout_or_stderr() { final String stdout = "300Mb of output"; final String stderr = "300Mb from stderr"; - CommandResult cr = commandResultFor(execResult().withStdout(stdout).withStderr(stderr)); + CommandSettings settings = new CommandSettings(); + settings.setExceptionOutputLimit(0); + CommandResult cr = commandResultFor(execResult().withStdout(stdout).withStderr(stderr), settings); try { cr.checkCommandFailed(); } catch (VcsException e) { assertThat(e.getMessage(), not(containsString(stdout))); assertThat(e.getMessage(), not(containsString(stderr))); } + + settings = new CommandSettings(); + settings.setExceptionOutputLimit(14); + cr = commandResultFor(execResult().withStdout(stdout).withStderr(stderr), settings); + try { + cr.checkCommandFailed(); + } catch (VcsException e) { + assertThat(e.getMessage(), containsString("300Mb from...")); + assertThat(e.getMessage(), containsString("See details in teamcity-vcs.log")); + } } public void when_command_fails_stderr_should_be_logged() { @@ -128,6 +140,10 @@ return new CommandResult(myLogger, "", builder.build(), new HashSet<String>(Arrays.asList(privateData)), new CommandSettings()); } + CommandResult commandResultFor(ExecResultBuilder builder, CommandSettings settings) { + return new CommandResult(myLogger, "", builder.build(), new HashSet<String>(), settings); + } + private class ExecResultBuilder { private String myStdout = ""; private String myStderr = "";