svn: Unified quick merge errors displaying
authorKonstantin Kolosovsky <konstantin.kolosovsky@jetbrains.com>
Tue, 27 Sep 2016 19:17:05 +0000 (22:17 +0300)
committerKonstantin Kolosovsky <konstantin.kolosovsky@jetbrains.com>
Tue, 11 Oct 2016 01:28:23 +0000 (04:28 +0300)
plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/BaseMergeTask.java
plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/LoadRecentBranchRevisions.java
plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeAllOrSelectedChooserTask.java
plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeAllWithBranchCopyPointTask.java
plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeCalculatorTask.java
plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeInitChecksTask.java
plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/ShelveLocalChangesTask.java

index f411c8958aca69fb460e8b93b1ca11a51183eebb..4497072c602bb86e946046f232c92af2bdf1835b 100644 (file)
@@ -31,6 +31,9 @@ import org.tmatesoft.svn.core.SVNURL;
 
 import java.util.List;
 
+import static com.intellij.openapi.application.ApplicationManager.getApplication;
+import static java.util.Collections.singletonList;
+
 public abstract class BaseMergeTask extends TaskDescriptor {
 
   private static final Logger LOG = Logger.getInstance(BaseMergeTask.class);
@@ -77,40 +80,30 @@ public abstract class BaseMergeTask extends TaskDescriptor {
       result = SvnUtil.createUrl(myMergeContext.getSourceUrl());
     }
     catch (SvnBindException e) {
-      finishWithError(context, e.getMessage(), true);
+      end(context, e);
     }
 
     return result;
   }
 
   @CalledInAny
-  protected void finishWithError(@NotNull ContinuationContext context, @NotNull String message, boolean isError) {
+  protected void end(@NotNull ContinuationContext context, @NotNull String message, boolean isError) {
     LOG.info((isError ? "Error: " : "Info: ") + message);
-    context.next(new TaskDescriptor(message, Where.AWT) {
-      @Override
-      public void run(ContinuationContext context) {
-        myInteraction.showErrors(message, isError);
-        context.cancelEverything();
-      }
-    });
+
+    context.cancelEverything();
+    getApplication().invokeLater(() -> myInteraction.showErrors(message, isError));
   }
 
   @CalledInAny
-  protected void finishWithError(@NotNull ContinuationContext context, @NotNull String message, @NotNull List<VcsException> exceptions) {
-    log(message, exceptions);
-
-    context.cancelEverything();
-    context.next(new TaskDescriptor(message, Where.AWT) {
-      @Override
-      public void run(ContinuationContext context) {
-        myInteraction.showErrors(message, exceptions);
-      }
-    });
+  protected void end(@NotNull ContinuationContext context, @NotNull VcsException e) {
+    end(context, myMergeContext.getTitle(), e);
   }
 
-  private static void log(@NotNull String message, @NotNull List<VcsException> exceptions) {
-    for (VcsException exception : exceptions) {
-      LOG.info(message, exception);
-    }
+  @CalledInAny
+  protected void end(@NotNull ContinuationContext context, @NotNull String message, @NotNull VcsException e) {
+    LOG.info(message, e);
+
+    context.cancelEverything();
+    getApplication().invokeLater(() -> myInteraction.showErrors(message, singletonList(e)));
   }
 }
index 070611bd73594cce2c25a73656b1e1c734aca955..c41fcf776f2258fe52c4002b97e9bcdcf101e315 100644 (file)
@@ -69,7 +69,7 @@ public class LoadRecentBranchRevisions extends BaseMergeTask {
       run();
     }
     catch (VcsException e) {
-      context.handleException(e, true);
+      end(context, e);
     }
   }
 
index e1a6b27fa99a50dcbf59fe217bf787c07dcc3725..39c5bae73e965a478be30a10287ad44f49ca2ffa 100644 (file)
@@ -66,7 +66,7 @@ public class MergeAllOrSelectedChooserTask extends BaseMergeTask {
       result = new MergeCalculatorTask(myMergeProcess);
     }
     catch (VcsException e) {
-      finishWithError(context, e.getMessage(), true);
+      end(context, e);
     }
 
     return result;
index 9dc1a94f43a0e68771e0e3c3f46f9aa41661f0bd..1449a359b0889d68eef28b0dc43bf356c49005bb 100644 (file)
@@ -22,7 +22,6 @@ import com.intellij.util.continuation.ContinuationContext;
 import com.intellij.util.continuation.Where;
 import org.jetbrains.annotations.NotNull;
 
-import java.util.Collections;
 import java.util.concurrent.atomic.AtomicReference;
 
 public class MergeAllWithBranchCopyPointTask extends BaseMergeTask
@@ -49,7 +48,7 @@ public class MergeAllWithBranchCopyPointTask extends BaseMergeTask
       runMerge(context, inverterValue);
     }
     else {
-      finishWithError(context, "Merge start wasn't found", true);
+      end(context, "Merge start wasn't found", true);
     }
   }
 
@@ -62,11 +61,11 @@ public class MergeAllWithBranchCopyPointTask extends BaseMergeTask
         runMerge(context, inverter);
       }
       else {
-        finishWithError(context, "Merge start wasn't found", true);
+        end(context, "Merge start wasn't found", true);
       }
     }
     catch (VcsException e) {
-      finishWithError(context, "Merge start wasn't found", Collections.singletonList(e));
+      end(context, "Merge start wasn't found", e);
     }
   }
 
index d3ad6698af6a839b2c786a4c4650b430c6eb6681..d7b1dfbff944b32d0fec93b8aacfc24846e6ad3e 100644 (file)
@@ -38,7 +38,6 @@ import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
 
 import static com.intellij.util.containers.ContainerUtil.newArrayList;
-import static java.util.Collections.singletonList;
 import static org.jetbrains.idea.svn.SvnUtil.ensureStartSlash;
 import static org.tmatesoft.svn.core.internal.util.SVNPathUtil.getRelativePath;
 import static org.tmatesoft.svn.core.internal.util.SVNPathUtil.isAncestor;
@@ -79,7 +78,7 @@ public class MergeCalculatorTask extends BaseMergeTask
         context.next(new ShowRevisionSelector(myMergeProcess, copyPoint, notMergedChangeLists, myMergeChecker));
       }
       else {
-        finishWithError(context, "Everything is up-to-date", false);
+        end(context, "Everything is up-to-date", false);
       }
     }
   }
@@ -92,11 +91,11 @@ public class MergeCalculatorTask extends BaseMergeTask
       result = myCopyData.get().get();
 
       if (result == null) {
-        finishWithError(context, "Merge start wasn't found", true);
+        end(context, "Merge start wasn't found", true);
       }
     }
     catch (VcsException e) {
-      finishWithError(context, "Merge start wasn't found", singletonList(e));
+      end(context, "Merge start wasn't found", e);
     }
 
     return result;
@@ -122,7 +121,7 @@ public class MergeCalculatorTask extends BaseMergeTask
                                                });
     }
     catch (VcsException e) {
-      finishWithError(context, "Checking revisions for merge fault", singletonList(e));
+      end(context, "Checking revisions for merge fault", e);
     }
 
     return result;
index 1714596f2f0416e6b48a309da8d3ed7e500c9d91..d664db26cd5136d00fc17252452ed589f963122c 100644 (file)
@@ -37,7 +37,7 @@ public class MergeInitChecksTask extends BaseMergeTask {
 
     if (url != null) {
       if (areInSameHierarchy(url, myMergeContext.getWcInfo().getUrl())) {
-        finishWithError(context, "Cannot merge from self", true);
+        end(context, "Cannot merge from self", true);
       }
       else if (hasSwitchedRoots() && !myInteraction.shouldContinueSwitchedRootFound()) {
         context.cancelEverything();
index 3aa3381a4c9c500a5a4d4cbfcdc8c209136023d6..661d98ff625662f204f3581087dda3401a5815d0 100644 (file)
@@ -71,10 +71,10 @@ public class ShelveLocalChangesTask extends BaseMergeTask {
         changedFiles.addAll(getAfterRevisionsFiles(entry.getValue().stream(), true).collect(toList()));
       }
       catch (IOException e) {
-        finishWithError(context, e.getMessage(), true);
+        end(context, new VcsException(e));
       }
       catch (VcsException e) {
-        finishWithError(context, e.getMessage(), true);
+        end(context, e);
       }
     }