changeset 632:83692f82fbb7

Return a MergeResult
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Wed, 14 Aug 2013 11:07:19 +0400
parents d28d52336ce5
children e89816840a2e
files mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialMergeSupport.java
diffstat 1 files changed, 14 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialMergeSupport.java	Wed Aug 07 13:08:31 2013 +0400
+++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialMergeSupport.java	Wed Aug 14 11:07:19 2013 +0400
@@ -2,10 +2,7 @@
 
 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot;
 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.MergeConflictException;
-import jetbrains.buildServer.vcs.MergeOptions;
-import jetbrains.buildServer.vcs.MergeSupport;
-import jetbrains.buildServer.vcs.VcsException;
-import jetbrains.buildServer.vcs.VcsRoot;
+import jetbrains.buildServer.vcs.*;
 import org.jetbrains.annotations.NotNull;
 import com.intellij.openapi.diagnostic.Logger;
 
@@ -28,12 +25,14 @@
     myHgVcsRootFactory = vcsRootFactory;
   }
 
-  public void merge(@NotNull VcsRoot root,
-                    @NotNull String srcRevision,
-                    @NotNull String dstBranch,
-                    @NotNull String message,
-                    @NotNull MergeOptions options) throws VcsException {
+  @NotNull
+  public MergeResult merge(@NotNull VcsRoot root,
+                           @NotNull String srcRevision,
+                           @NotNull String dstBranch,
+                           @NotNull String message,
+                           @NotNull MergeOptions options) throws VcsException {
     File tmpDir = null;
+    MergeResult mergeResult = new MergeResult();
     try {
       tmpDir = HgFileUtil.createTempDir();
       HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root);
@@ -46,12 +45,17 @@
         repo.merge().revision(srcRevision).call();
       } catch (MergeConflictException e) {
         List<String> conflicts = repo.resolve().call();
-        throw new VcsException(getConflicsErrorMessage(conflicts));
+        mergeResult.setSuccess(false);
+        for (String conflict : conflicts) {
+          mergeResult.addConflict(conflict);
+        }
+        return mergeResult;
       }
 
       repo.commit().message(message).call();
 
       repo.push().toRepository(hgRoot.getRepository()).call();
+      return mergeResult;
     } catch (Exception e) {
       if (e instanceof VcsException)
         throw (VcsException) e;
@@ -60,24 +64,4 @@
       deleteDir(tmpDir, LOG);
     }
   }
-
-  @NotNull
-  private String getConflicsErrorMessage(@NotNull List<String> conflicts) {
-    if (conflicts.isEmpty())
-      return "Merge failed, but no conflicts found";
-
-    if (conflicts.size() == 1)
-      return "Failed to merge file " + conflicts.get(0);
-
-    StringBuilder message = new StringBuilder();
-    message.append("Failed to merge files: ");
-    int i = 0;
-    for (; i < conflicts.size() && i < 3; i++) {
-      message.append(conflicts.get(i)).append("\n");
-    }
-    if (i < conflicts.size())
-      message.append(" and ").append(conflicts.size() - i).append(" more");
-
-    return message.toString();
-  }
 }