mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
svn: Refactored "MergeTask" - code simplified
* Do not wrap usual "Task.Backgroundable" instance into "TaskDescriptor" * Removed "suspend/ping" logic - start next task in callback
This commit is contained in:
@@ -758,6 +758,7 @@ public class SvnUtil {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static SVNURL parseUrl(@NotNull String url) {
|
||||
try {
|
||||
return SVNURL.parseURIEncoded(url);
|
||||
|
||||
@@ -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<SvnChangeList> 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() {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user