From b7eaa8dfac4ea290195c5596920c137da45aac7b Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Tue, 25 Oct 2016 14:00:46 +0300 Subject: [PATCH] svn: Refactored "MergeTask" - code simplified * Do not wrap usual "Task.Backgroundable" instance into "TaskDescriptor" * Removed "suspend/ping" logic - start next task in callback --- .../src/org/jetbrains/idea/svn/SvnUtil.java | 1 + .../idea/svn/integrate/BaseMergeTask.java | 21 ++++++----- .../idea/svn/integrate/MergeTask.java | 36 ++++++------------- 3 files changed, 24 insertions(+), 34 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java index df8cb077319f..fc880511b373 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java @@ -758,6 +758,7 @@ public class SvnUtil { } } + @NotNull public static SVNURL parseUrl(@NotNull String url) { try { return SVNURL.parseURIEncoded(url); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/BaseMergeTask.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/BaseMergeTask.java index be6dfe868cf7..264067c150c0 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/BaseMergeTask.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/BaseMergeTask.java @@ -16,6 +16,7 @@ package org.jetbrains.idea.svn.integrate; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.progress.Task; import com.intellij.openapi.vcs.VcsException; import com.intellij.util.continuation.ContinuationContext; import com.intellij.util.continuation.SeparatePiecesRunner; @@ -30,6 +31,7 @@ import java.util.List; import static com.intellij.openapi.application.ApplicationManager.getApplication; import static java.util.Collections.singletonList; +import static org.jetbrains.idea.svn.SvnUtil.parseUrl; import static org.jetbrains.idea.svn.WorkingCopyFormat.ONE_DOT_EIGHT; public abstract class BaseMergeTask extends TaskDescriptor { @@ -72,14 +74,6 @@ public abstract class BaseMergeTask extends TaskDescriptor { myRunner.next(tasks); } - protected void suspend() { - myRunner.suspend(); - } - - protected void ping() { - myRunner.ping(); - } - protected void mergeAll(boolean supportsMergeInfo) { // merge info is not supported - branch copy point is used to make first sync merge successful (without unnecessary tree conflicts) // merge info is supported and svn client < 1.8 - branch copy point is used to determine if sync or reintegrate merge should be performed @@ -99,7 +93,16 @@ public abstract class BaseMergeTask extends TaskDescriptor { } protected void merge(@NotNull String title, @NotNull MergerFactory mergerFactory, @Nullable List changeLists) { - next(new LocalChangesPromptTask(myMergeProcess, changeLists), new MergeTask(myMergeProcess, mergerFactory, title)); + next(new LocalChangesPromptTask(myMergeProcess, changeLists), + new MergeTask(myMergeProcess, () -> + newIntegrateTask(title, mergerFactory).queue())); + } + + @NotNull + protected Task newIntegrateTask(@NotNull String title, @NotNull MergerFactory mergerFactory) { + return new SvnIntegrateChangesTask(myMergeContext.getVcs(), new WorkingCopyInfo(myMergeContext.getWcInfo().getPath(), true), + mergerFactory, parseUrl(myMergeContext.getSourceUrl()), title, false, + myMergeContext.getBranchName()); } protected void end() { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeTask.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeTask.java index 35cc21fb3fc8..5c33c2ce745a 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeTask.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeTask.java @@ -20,37 +20,29 @@ import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.changes.ChangeListManager; import com.intellij.openapi.vcs.changes.InvokeAfterUpdateMode; import com.intellij.openapi.vcs.changes.LocalChangeList; -import com.intellij.util.continuation.TaskDescriptor; import com.intellij.util.continuation.Where; import org.jetbrains.annotations.NotNull; -import org.tmatesoft.svn.core.SVNURL; - -import static org.jetbrains.idea.svn.SvnUtil.createUrl; public class MergeTask extends BaseMergeTask { - @NotNull private final MergerFactory myFactory; + @NotNull private final Runnable myCallback; - public MergeTask(@NotNull QuickMerge mergeProcess, @NotNull MergerFactory factory, @NotNull String mergeTitle) { - super(mergeProcess, mergeTitle, Where.AWT); - - myFactory = factory; + public MergeTask(@NotNull QuickMerge mergeProcess, @NotNull Runnable callback) { + super(mergeProcess, "", Where.AWT); + myCallback = callback; } @Override public void run() throws VcsException { - next(TaskDescriptor.createForBackgroundableTask(newIntegrateTask(createUrl(myMergeContext.getSourceUrl())))); - boolean needRefresh = setupDefaultEmptyChangeListForMerge(); - if (needRefresh) { - refreshChanges(); - } - } - @NotNull - private SvnIntegrateChangesTask newIntegrateTask(@NotNull SVNURL branchUrl) { - return new SvnIntegrateChangesTask(myMergeContext.getVcs(), new WorkingCopyInfo(myMergeContext.getWcInfo().getPath(), true), myFactory, - branchUrl, getName(), false, myMergeContext.getBranchName()); + if (needRefresh) { + ChangeListManager.getInstance(myMergeContext.getProject()) + .invokeAfterUpdate(myCallback, InvokeAfterUpdateMode.BACKGROUND_NOT_CANCELLABLE, "", ModalityState.NON_MODAL); + } + else { + myCallback.run(); + } } private boolean setupDefaultEmptyChangeListForMerge() { @@ -79,10 +71,4 @@ public class MergeTask extends BaseMergeTask { return needRefresh; } - - private void refreshChanges() { - suspend(); - ChangeListManager.getInstance(myMergeContext.getProject()) - .invokeAfterUpdate(this::ping, InvokeAfterUpdateMode.BACKGROUND_NOT_CANCELLABLE, "", ModalityState.NON_MODAL); - } }