# HG changeset patch # User Dmitry Neverov # Date 1398854980 -7200 # Node ID 969b545efa1b929f4eec5da50a75927532e43f83 # Parent 427f550c4554cac6db6df5f94769e802874b6471# Parent 83e1fb5aa8431f115e1c0255350ac20479e715fb Merge branch Gaya-8.1.x diff -r 427f550c4554 -r 969b545efa1b mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java --- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java Tue Apr 29 17:10:46 2014 +0200 +++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java Wed Apr 30 12:49:40 2014 +0200 @@ -109,7 +109,7 @@ Throwable e = getException(); if (isMercurialNotFoundException(e)) { assert e != null; - throw new MercurialNotFoundException(myCommand, e); + throw new MercurialNotFoundException(getCommand(), e); } throw new VcsException(message); } diff -r 427f550c4554 -r 969b545efa1b mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java --- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java Tue Apr 29 17:10:46 2014 +0200 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java Wed Apr 30 12:49:40 2014 +0200 @@ -16,12 +16,14 @@ package jetbrains.buildServer.buildTriggers.vcs.mercurial.command; +import com.intellij.execution.process.ProcessNotCreatedException; import com.intellij.openapi.diagnostic.Logger; import jetbrains.buildServer.ExecResult; import jetbrains.buildServer.StreamGobbler; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.AbandonedTransactionFound; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.UnknownRevisionException; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.UnrelatedRepositoryException; +import jetbrains.buildServer.util.TestFor; import jetbrains.buildServer.vcs.VcsException; import org.apache.log4j.Level; import org.jetbrains.annotations.NonNls; @@ -31,6 +33,7 @@ import org.testng.annotations.Test; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -40,7 +43,6 @@ import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; import static org.testng.AssertJUnit.*; -import static org.testng.AssertJUnit.assertTrue; /** * @author dmitry.neverov @@ -62,6 +64,20 @@ myLogger.assertLogMessagesDontContain(password); } + @TestFor(issues = "TW-36251") + public void exception_should_not_reveal_password_when_mercurial_is_not_found() { + String password = "pass"; + Exception hgNotFound = new ProcessNotCreatedException("Cannot run program \"hg\". No such file or directory", new IOException(), null); + CommandResult commandResult = commandResultFor("hg pull https://usr:" + password + "@acme.com", execResult().withException(hgNotFound), password); + try { + commandResult.checkCommandFailed(); + fail("should fail"); + } catch (VcsException e) { + assertFalse(e.getMessage().contains(password)); + myLogger.assertLogMessagesDontContain(password); + } + } + @DataProvider(name = "exitCodesForErrors") public static Object[][] exitCodesForErrors() { return new Object[][] { @@ -152,11 +168,18 @@ return new ExecResultBuilder(); } - CommandResult commandResultFor(ExecResultBuilder builder, String... privateData) { - return new CommandResult(myLogger, "", builder.build(), new HashSet(Arrays.asList(privateData)), new CommandSettings()); + @NotNull + CommandResult commandResultFor(@NotNull ExecResultBuilder builder, String... privateData) { + return commandResultFor("", builder, privateData); } - CommandResult commandResultFor(ExecResultBuilder builder, CommandSettings settings) { + @NotNull + CommandResult commandResultFor(@NotNull String command, @NotNull ExecResultBuilder builder, String... privateData) { + return new CommandResult(myLogger, command, builder.build(), new HashSet(Arrays.asList(privateData)), new CommandSettings()); + } + + @NotNull + CommandResult commandResultFor(@NotNull ExecResultBuilder builder, CommandSettings settings) { return new CommandResult(myLogger, "", builder.build(), new HashSet(), settings); }