From 3c13ee502591629d1a239b27ec057e1aa32f2d18 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Tue, 18 Oct 2016 03:26:44 +0300 Subject: [PATCH] svn: Do not create separate "QuickMerge" instance in "ToBeMergedDialog" --- .../integrate/LoadRecentBranchRevisions.java | 56 +++++++++++-------- .../idea/svn/integrate/ToBeMergedDialog.java | 12 ++-- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/LoadRecentBranchRevisions.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/LoadRecentBranchRevisions.java index 4fd51723b9c3..80c111f541fb 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/LoadRecentBranchRevisions.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/LoadRecentBranchRevisions.java @@ -40,24 +40,14 @@ public class LoadRecentBranchRevisions extends BaseMergeTask { public static final String PROP_BUNCH_SIZE = "idea.svn.quick.merge.bunch.size"; private final static int BUNCH_SIZE = 100; - private final int myBunchSize; - private final long myFirst; private boolean myLastLoaded; @NotNull private final OneShotMergeInfoHelper myMergeChecker; @NotNull private final List myCommittedChangeLists; public LoadRecentBranchRevisions(@NotNull QuickMerge mergeProcess) { - this(mergeProcess, -1, -1); - } - - public LoadRecentBranchRevisions(@NotNull QuickMerge mergeProcess, long first, int bunchSize) { super(mergeProcess, "Loading recent " + mergeProcess.getMergeContext().getBranchName() + " revisions", Where.POOLED); - myFirst = first; myCommittedChangeLists = newArrayList(); myMergeChecker = new OneShotMergeInfoHelper(myMergeContext); - - Integer testBunchSize = Integer.getInteger(PROP_BUNCH_SIZE); - myBunchSize = testBunchSize != null ? testBunchSize.intValue() : (bunchSize > 0 ? bunchSize : BUNCH_SIZE); } public boolean isLastLoaded() { @@ -72,27 +62,46 @@ public class LoadRecentBranchRevisions extends BaseMergeTask { ProgressManager.progress2("Calculating not merged revisions"); myMergeChecker.prepare(); - List notMergedChangeLists = getNotMergedChangeLists(getChangeListsBefore(myFirst)); - myLastLoaded = notMergedChangeLists.size() < myBunchSize + 1; - myCommittedChangeLists.addAll(notMergedChangeLists.subList(0, min(myBunchSize, notMergedChangeLists.size()))); + Pair, Boolean> loadResult = loadChangeLists(myMergeContext, -1, getBunchSize(-1)); + myCommittedChangeLists.addAll(loadResult.first); + myLastLoaded = loadResult.second; } @NotNull - private List> getChangeListsBefore(long revision) throws VcsException { + public static Pair, Boolean> loadChangeLists(@NotNull MergeContext mergeContext, long beforeRevision, int size) + throws VcsException { + List changeLists = + getNotMergedChangeLists(getChangeListsBefore(mergeContext, beforeRevision, size), beforeRevision); + + return Pair.create( + changeLists.subList(0, min(size, changeLists.size())), + changeLists.size() < size + 1); + } + + public static int getBunchSize(int size) { + Integer configuredSize = Integer.getInteger(PROP_BUNCH_SIZE); + + return configuredSize != null ? configuredSize : size > 0 ? size : BUNCH_SIZE; + } + + @NotNull + private static List> getChangeListsBefore(@NotNull MergeContext mergeContext, + long beforeRevision, + int size) throws VcsException { ChangeBrowserSettings settings = new ChangeBrowserSettings(); - if (revision > 0) { - settings.CHANGE_BEFORE = String.valueOf(revision); + if (beforeRevision > 0) { + settings.CHANGE_BEFORE = String.valueOf(beforeRevision); settings.USE_CHANGE_BEFORE_FILTER = true; } ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator(); - ProgressManager - .progress2(message("progress.text2.collecting.history", myMergeContext.getSourceUrl() + (revision > 0 ? ("@" + revision) : ""))); + ProgressManager.progress2( + message("progress.text2.collecting.history", mergeContext.getSourceUrl() + (beforeRevision > 0 ? ("@" + beforeRevision) : ""))); List> result = newArrayList(); - ((SvnCommittedChangesProvider)myMergeContext.getVcs().getCommittedChangesProvider()) - .getCommittedChangesWithMergedRevisons(settings, new SvnRepositoryLocation(myMergeContext.getSourceUrl()), - myBunchSize + (revision > 0 ? 2 : 1), + ((SvnCommittedChangesProvider)mergeContext.getVcs().getCommittedChangesProvider()) + .getCommittedChangesWithMergedRevisons(settings, new SvnRepositoryLocation(mergeContext.getSourceUrl()), + size + (beforeRevision > 0 ? 2 : 1), (list, tree) -> { indicator.setText2(message("progress.text2.processing.revision", list.getNumber())); result.add(Pair.create(list, tree)); @@ -101,12 +110,13 @@ public class LoadRecentBranchRevisions extends BaseMergeTask { } @NotNull - private List getNotMergedChangeLists(@NotNull List> changeLists) { + private static List getNotMergedChangeLists(@NotNull List> changeLists, + long revision) { List result = newArrayList(); for (Pair pair : changeLists) { // do not take first since it's equal - if (myFirst <= 0 || myFirst != pair.getFirst().getNumber()) { + if (revision <= 0 || revision != pair.getFirst().getNumber()) { // TODO: Currently path filtering from MergeCalculatorTask.checkListForPaths is not applied as it removes some necessary revisions // TODO: (i.e. merge revisions) from list. Check if that filtering is really necessary for "Quick Manual Select" option. result.add(pair.getFirst()); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/ToBeMergedDialog.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/ToBeMergedDialog.java index 3534bb76e62f..70f9ae5e5c80 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/ToBeMergedDialog.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/ToBeMergedDialog.java @@ -76,6 +76,8 @@ import static com.intellij.util.containers.ContainerUtilRt.newArrayList; import static com.intellij.util.containers.ContainerUtilRt.newHashSet; import static java.util.Collections.singletonList; import static java.util.Collections.synchronizedMap; +import static org.jetbrains.idea.svn.integrate.LoadRecentBranchRevisions.getBunchSize; +import static org.jetbrains.idea.svn.integrate.LoadRecentBranchRevisions.loadChangeLists; public class ToBeMergedDialog extends DialogWrapper { public static final int MERGE_ALL_CODE = 222; @@ -490,15 +492,11 @@ public class ToBeMergedDialog extends DialogWrapper { @Override public void run(@NotNull ProgressIndicator indicator) { - // TODO: Update this not to create new "QuickMerge" instance - QuickMerge mergeProcess = new QuickMerge(myMergeContext, new QuickMergeInteractionImpl(myMergeContext)); - LoadRecentBranchRevisions loader = new LoadRecentBranchRevisions(mergeProcess, myStartNumber, myQuantity); - try { - loader.run(); + Pair, Boolean> loadResult = loadChangeLists(myMergeContext, myStartNumber, getBunchSize(myQuantity)); - myLists = loader.getChangeLists(); - myIsLastListLoaded = loader.isLastLoaded(); + myLists = loadResult.first; + myIsLastListLoaded = loadResult.second; } catch (VcsException e) { setEmptyData();