From e115eb5594945c2b017c2c6ec2f9380a75a70daf Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Wed, 12 Oct 2016 14:37:46 +0300 Subject: [PATCH] svn: Refactored "BaseMergeTask" and inheritors - code simplified --- .../idea/svn/integrate/BaseMergeTask.java | 29 ++----------------- .../CheckRepositorySupportsMergeInfoTask.java | 12 ++------ .../svn/integrate/MergeInitChecksTask.java | 19 ++++++------ .../idea/svn/integrate/MergeTask.java | 17 +++++------ 4 files changed, 22 insertions(+), 55 deletions(-) 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 5e96608ef2e9..ce61246cf7f6 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/BaseMergeTask.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/BaseMergeTask.java @@ -24,15 +24,11 @@ import com.intellij.util.continuation.TaskDescriptor; import com.intellij.util.continuation.Where; import org.jetbrains.annotations.CalledInAny; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.idea.svn.SvnUtil; -import org.jetbrains.idea.svn.commandLine.SvnBindException; -import org.tmatesoft.svn.core.SVNURL; import java.util.List; import static com.intellij.openapi.application.ApplicationManager.getApplication; -import static com.intellij.util.containers.ContainerUtil.newArrayList; +import static com.intellij.util.containers.ContainerUtil.ar; import static java.util.Collections.singletonList; import static org.jetbrains.idea.svn.WorkingCopyFormat.ONE_DOT_EIGHT; @@ -76,11 +72,6 @@ public abstract class BaseMergeTask extends TaskDescriptor { myRunner.next(tasks); } - @CalledInAny - protected void next(@NotNull List tasks) { - myRunner.next(tasks); - } - protected void suspend() { myRunner.suspend(); } @@ -90,7 +81,7 @@ public abstract class BaseMergeTask extends TaskDescriptor { } @NotNull - protected List getMergeAllTasks(boolean supportsMergeInfo) { + protected TaskDescriptor[] getMergeAllTasks(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 // merge info is supported and svn client >= 1.8 - branch copy point is not used - svn automatically detects if reintegrate is necessary @@ -100,7 +91,7 @@ public abstract class BaseMergeTask extends TaskDescriptor { : new LookForBranchOriginTask(myMergeProcess, true, copyPoint -> next(new MergeAllWithBranchCopyPointTask(myMergeProcess, copyPoint, supportsMergeInfo))); - return newArrayList(new LocalChangesPromptTask(myMergeProcess), mergeAllTask); + return ar(new LocalChangesPromptTask(myMergeProcess), mergeAllTask); } protected void runChangeListsMerge(@NotNull List lists, @NotNull String title) { @@ -108,20 +99,6 @@ public abstract class BaseMergeTask extends TaskDescriptor { new MergeTask(myMergeProcess, new ChangeListsMergerFactory(lists, false, false, true), title)); } - @Nullable - protected SVNURL parseSourceUrl() { - SVNURL result = null; - - try { - result = SvnUtil.createUrl(myMergeContext.getSourceUrl()); - } - catch (SvnBindException e) { - end(e); - } - - return result; - } - protected void end() { myRunner.cancelEverything(); } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/CheckRepositorySupportsMergeInfoTask.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/CheckRepositorySupportsMergeInfoTask.java index 0a851711695a..8f6475501555 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/CheckRepositorySupportsMergeInfoTask.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/CheckRepositorySupportsMergeInfoTask.java @@ -15,13 +15,10 @@ */ package org.jetbrains.idea.svn.integrate; -import com.intellij.util.continuation.TaskDescriptor; import com.intellij.util.continuation.Where; import org.jetbrains.annotations.NotNull; -import java.util.List; - -import static com.intellij.util.containers.ContainerUtil.newArrayList; +import static com.intellij.util.containers.ContainerUtil.ar; import static org.jetbrains.idea.svn.SvnUtil.checkRepositoryVersion15; public class CheckRepositorySupportsMergeInfoTask extends BaseMergeTask { @@ -32,16 +29,11 @@ public class CheckRepositorySupportsMergeInfoTask extends BaseMergeTask { @Override public void run() { - next(supportsMergeInfo() ? getChooseMergeTypeTasks() : getMergeAllTasks(false)); + next(supportsMergeInfo() ? ar(new MergeAllOrSelectedChooserTask(myMergeProcess)) : getMergeAllTasks(false)); } private boolean supportsMergeInfo() { return myMergeContext.getWcInfo().getFormat().supportsMergeInfo() && checkRepositoryVersion15(myMergeContext.getVcs(), myMergeContext.getSourceUrl()); } - - @NotNull - private List getChooseMergeTypeTasks() { - return newArrayList(new MergeAllOrSelectedChooserTask(myMergeProcess)); - } } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeInitChecksTask.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeInitChecksTask.java index b54f1fa48d8c..c4b17415c5a6 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeInitChecksTask.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeInitChecksTask.java @@ -16,6 +16,7 @@ package org.jetbrains.idea.svn.integrate; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vcs.VcsException; import com.intellij.util.continuation.Where; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.svn.NestedCopyType; @@ -24,6 +25,8 @@ import org.tmatesoft.svn.core.internal.util.SVNURLUtil; import java.io.File; +import static org.jetbrains.idea.svn.SvnUtil.createUrl; + public class MergeInitChecksTask extends BaseMergeTask { public MergeInitChecksTask(@NotNull QuickMerge mergeProcess) { @@ -31,16 +34,12 @@ public class MergeInitChecksTask extends BaseMergeTask { } @Override - public void run() { - SVNURL url = parseSourceUrl(); - - if (url != null) { - if (areInSameHierarchy(url, myMergeContext.getWcInfo().getUrl())) { - end("Cannot merge from self", true); - } - else if (hasSwitchedRoots() && !myInteraction.shouldContinueSwitchedRootFound()) { - end(); - } + public void run() throws VcsException { + if (areInSameHierarchy(createUrl(myMergeContext.getSourceUrl()), myMergeContext.getWcInfo().getUrl())) { + end("Cannot merge from self", true); + } + else if (hasSwitchedRoots() && !myInteraction.shouldContinueSwitchedRootFound()) { + 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 47b1854e5d55..35cc21fb3fc8 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeTask.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/MergeTask.java @@ -16,6 +16,7 @@ package org.jetbrains.idea.svn.integrate; import com.intellij.openapi.application.ModalityState; +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; @@ -24,6 +25,8 @@ 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; @@ -35,16 +38,12 @@ public class MergeTask extends BaseMergeTask { } @Override - public void run() { - SVNURL sourceUrl = parseSourceUrl(); + public void run() throws VcsException { + next(TaskDescriptor.createForBackgroundableTask(newIntegrateTask(createUrl(myMergeContext.getSourceUrl())))); - if (sourceUrl != null) { - next(TaskDescriptor.createForBackgroundableTask(newIntegrateTask(sourceUrl))); - - boolean needRefresh = setupDefaultEmptyChangeListForMerge(); - if (needRefresh) { - refreshChanges(); - } + boolean needRefresh = setupDefaultEmptyChangeListForMerge(); + if (needRefresh) { + refreshChanges(); } }