changeset 918:0037067465aa

Merge branch Hajipur-9.0.x
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Tue, 13 Jan 2015 20:58:29 +0100
parents 40124b503933 (current diff) e467e67d5892 (diff)
children 16ad8d51b001
files
diffstat 14 files changed, 60 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ext/impl/SparseCheckoutProvider.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-agent/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/ext/impl/SparseCheckoutProvider.java	Tue Jan 13 20:58:29 2015 +0100
@@ -62,7 +62,7 @@
       }
       CommandResult result = info.getTempDirRepo().runCommand("help", "extensions");
       boolean enabledExtensions = false;
-      for (String line : StringUtil.splitByLines(result.getStdout())) {
+      for (String line : StringUtil.splitByLines(result.getRawStdout())) {
         if (line.trim().equals("enabled extensions:")) {
           enabledExtensions = true;
           continue;
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/BranchesCommand.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/BranchesCommand.java	Tue Jan 13 20:58:29 2015 +0100
@@ -46,7 +46,7 @@
     MercurialCommandLine cli = createCommandLine();
     cli.addParameter(getBranchesCommand());
     CommandResult res = runCommand(cli);
-    String stdout = res.getStdout();
+    String stdout = res.getRawStdout();
     Map<String, String> result = new HashMap<String, String>();
     Pattern branchPattern = Pattern.compile("(.*)[\\s]+([0-9]+:[A-Za-z0-9]+).*");
     for (String line: stdout.split("[\r\n]+")) {
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResult.java	Tue Jan 13 20:58:29 2015 +0100
@@ -78,10 +78,15 @@
   }
 
   @NotNull
-  public String getStdout() {
+  public String getSecureStdout() {
     return removePrivateData(myDelegate.getStdout(), myPrivateData);
   }
 
+  @NotNull
+  public String getRawStdout() {
+    return myDelegate.getStdout();
+  }
+
   public void checkCommandFailed() throws VcsException {
     checkFailure(false);
   }
@@ -90,7 +95,7 @@
     rethrowDetectedError();
     if (isFailure())
       logAndThrowError();
-    String stderr = getStderr();
+    String stderr = getSecureStderr();
     if (!isEmpty(stderr)) {
       if (failWhenStderrIsNonEmpty)
         logAndThrowError();
@@ -139,10 +144,15 @@
   }
 
   @NotNull
-  private String getStderr() {
+  private String getSecureStderr() {
     return removePrivateData(myDelegate.getStderr(), myPrivateData);
   }
 
+  @NotNull
+  private String getRawStderr() {
+    return myDelegate.getStderr();
+  }
+
   @Nullable
   private Throwable getException() {
     return myDelegate.getException();
@@ -180,7 +190,7 @@
     if (!isEmpty(myCommandWorkingDir))
       message.append("[").append(myCommandWorkingDir).append("] ");
     message.append(getCommand()).append("' command failed.");
-    String stderr = getStderr();
+    String stderr = getSecureStderr();
     if (!isEmpty(stderr)) {
       int logOutputLimit = mySettings.getLogOutputLimit();
       if (logOutputLimit == -1) {
@@ -195,7 +205,7 @@
   private String getExceptionMessage() {
     StringBuilder message = new StringBuilder();
     message.append("'").append(getCommand()).append("' command failed.");
-    String stderr = getStderr();
+    String stderr = getSecureStderr();
     if (!isEmpty(stderr)) {
       message.append("\n");
       int limit = mySettings.getExceptionOutputLimit();
@@ -213,7 +223,7 @@
   private void rethrowDetectedError() throws VcsException {
     if (!shouldDetectErrors())
       return;
-    String stderr = getStderr().trim();
+    String stderr = getRawStderr().trim();
     checkUnrelatedRepository(stderr);
     checkUnknownRevision(stderr);
     checkFileNotUnderTheRoot(stderr);
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandUtil.java	Tue Jan 13 20:58:29 2015 +0100
@@ -173,9 +173,9 @@
   private static void logCommandOutput(@NotNull String command, @NotNull CommandResult result, @NotNull CommandSettings settings) {
     int limit = settings.getLogOutputLimit();
     if (limit == -1) {
-      Loggers.VCS.debug("Command " + command + " output:\n" + result.getStdout());
+      Loggers.VCS.debug("Command " + command + " output:\n" + result.getSecureStdout());
     } else {
-      Loggers.VCS.debug("Command " + command + " output:\n" + StringUtil.truncateStringValueWithDotsAtEnd(result.getStdout(), limit));
+      Loggers.VCS.debug("Command " + command + " output:\n" + StringUtil.truncateStringValueWithDotsAtEnd(result.getSecureStdout(), limit));
     }
   }
 }
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommitsAndMountPointsCommand.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommitsAndMountPointsCommand.java	Tue Jan 13 20:58:29 2015 +0100
@@ -98,9 +98,9 @@
     cli.addParameter(new File(root, "result").getPath());
 
     final CommandResult res = runCommand(cli);
-    final String output = res.getStdout();
+    final String rawOutput = res.getRawStdout();
 
-    if (!output.contains("##Completed##")) throw new VcsException("Command failed: " + output);
+    if (!rawOutput.contains("##Completed##")) throw new VcsException("Command failed: " + res.getSecureStdout());
 
     try {
       parseFileLog(new File(root, "result.hgsub"), new CommitsAndMountPointsParser.ContentsConsumer() {
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/IdentifyCommand.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/IdentifyCommand.java	Tue Jan 13 20:58:29 2015 +0100
@@ -103,7 +103,7 @@
       cli.addParameter(myNamedRevision);
     }
     CommandResult res = runCommand(cli);
-    String output = res.getStdout().trim();
+    String output = res.getRawStdout().trim();
     if (myShowBranch) {
       return output;
     } else {
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LoadDagCommand.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LoadDagCommand.java	Tue Jan 13 20:58:29 2015 +0100
@@ -60,7 +60,7 @@
         final CommandResult res = runCommand(cli);
 
 
-        final String output = res.getStdout();
+        final String output = res.getRawStdout();
         String fromNode = null;
         for (String line : StringUtil.splitByLines(output)) {
           final String[] revs = line.split(" ");
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java	Tue Jan 13 20:58:29 2015 +0100
@@ -139,7 +139,7 @@
         cli.addParameters(myFiles);
 
         final CommandResult res = runCommand(cli);
-        final String output = res.getStdout();
+        final String output = res.getRawStdout();
         try {
           List<ChangeSet> changes = parseChangeSetsXml(output);
           if (myCalculateParents)
@@ -148,9 +148,9 @@
         } catch (Exception e) {
           int limit = myCommandSettings.getLogOutputLimit();
           if (limit == -1) {
-            LOG.error("Error while parsing log output:\n" + output, e);
+            LOG.error("Error while parsing log output:\n" + res.getSecureStdout(), e);
           } else {
-            LOG.error("Error while parsing log output:\n" + StringUtil.truncateStringValueWithDotsAtEnd(output, limit), e);
+            LOG.error("Error while parsing log output:\n" + StringUtil.truncateStringValueWithDotsAtEnd(res.getSecureStdout(), limit), e);
           }
           throw new VcsException("Error while parsing log output, see teamcity-vcs.log for details", e);
         }
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ParentsCommand.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ParentsCommand.java	Tue Jan 13 20:58:29 2015 +0100
@@ -47,7 +47,7 @@
       cli.addParameters("-r", myRevision);
     CommandResult res = runCommand(cli);
     List<String> parentRevisions = new ArrayList<String>();
-    for (String line : res.getStdout().split("\n")) {
+    for (String line : res.getRawStdout().split("\n")) {
       if (StringUtil.isEmpty(line))
         continue;
       parentRevisions.add(new ChangeSet(line).getId());
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ResolveCommand.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/ResolveCommand.java	Tue Jan 13 20:58:29 2015 +0100
@@ -37,7 +37,7 @@
     MercurialCommandLine cmd = createCommandLine();
     cmd.addParameters("resolve", "--no-status", "--list");
     CommandResult result = runCommand(cmd);
-    String stdout = result.getStdout();
+    String stdout = result.getRawStdout();
     if (stdout.length() == 0)
       return emptyList();
     List<String> unresolvedFiles = new ArrayList<String>();
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/StatusCommand.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/StatusCommand.java	Tue Jan 13 20:58:29 2015 +0100
@@ -106,7 +106,7 @@
     cli.addParameter(from + ":" + to);
 
     final CommandResult res = runCommand(cli);
-    return parseFiles(res.getStdout());
+    return parseFiles(res.getRawStdout());
   }
 
   @NotNull
--- a/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/VersionCommand.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/VersionCommand.java	Tue Jan 13 20:58:29 2015 +0100
@@ -45,7 +45,7 @@
     cli.addEnvParam("LC_MESSAGE", "en_US");
 
     CommandResult result = runCommand(cli, myCommandSettings);
-    return HgVersion.parse(result.getStdout());
+    return HgVersion.parse(result.getRawStdout());
   }
 
 
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupportTest.java	Tue Jan 13 20:58:29 2015 +0100
@@ -270,8 +270,8 @@
     cli.setEnvParams(map("HGRCPATH", ""));
     cli.addParameter("tags");
     CommandResult res = CommandUtil.runCommand(cli, new CommandSettings());
-    assertTrue(res.getStdout().contains("new_tag"));
-    assertTrue(res.getStdout().contains("1:1d446e82d356"));
+    assertTrue(res.getRawStdout().contains("new_tag"));
+    assertTrue(res.getRawStdout().contains("1:1d446e82d356"));
   }
 
   public void test_tag_in_branch() throws IOException, VcsException {
@@ -287,8 +287,8 @@
     cli.addParameter("tags");
     cli.setEnvParams(map("HGRCPATH", ""));
     CommandResult res = CommandUtil.runCommand(cli, new CommandSettings());
-    assertTrue(res.getStdout().contains("branch_tag"));
-    assertTrue(res.getStdout().contains("7:376dcf05cd2a"));
+    assertTrue(res.getRawStdout().contains("branch_tag"));
+    assertTrue(res.getRawStdout().contains("7:376dcf05cd2a"));
   }
 
 
@@ -378,6 +378,30 @@
   }
 
 
+  @TestFor(issues = "TW-39663")
+  public void do_not_escape_command_output_for_parsing() throws Exception {
+    File repository = copyRepository(myTempFiles, simpleRepo());
+    VcsRoot root = vcsRoot().withUrl(repository.getAbsolutePath())
+            .withBranch("default")
+            .withPassword("default") //to check we don't escape branch names
+            .withArchiveForPatch(true)
+            .build();
+
+    assertTrue(myVcs.getCollectChangesPolicy().getCurrentState(root).getBranchRevisions().containsKey("default"));
+
+    root = vcsRoot().withUrl(repository.getAbsolutePath())
+            .withBranch("default")
+            .withPassword("xml") //to ensure we don't escape xml from 'hg log'
+            .withArchiveForPatch(true)
+            .build();
+
+    assertEquals(7, myVcs.getCollectChangesPolicy().collectChanges(root,
+            RepositoryStateData.createVersionState("default", map("default", "1:1d446e82d356")),
+            RepositoryStateData.createVersionState("default", map("default", "11:e6935c9c80bf")),
+            CheckoutRules.DEFAULT).size());
+  }
+
+
   public void labeling_should_not_populate_files_in_local_mirror() throws Exception {
     VcsRootImpl root = createVcsRoot(simpleRepo());
     myVcs.getCollectChangesPolicy().getCurrentState(root);
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java	Fri Jan 02 12:37:50 2015 +0100
+++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommandResultTest.java	Tue Jan 13 20:58:29 2015 +0100
@@ -60,7 +60,7 @@
   public void output_should_not_contain_private_data() {
     String password = "pass";
     CommandResult commandResult = commandResultFor(execResult().withStdout(password).withStderr(password), password);
-    assertFalse(commandResult.getStdout().contains(password));
+    assertFalse(commandResult.getSecureStdout().contains(password));
     myLogger.assertLogMessagesDontContain(password);
   }