mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
svn: Unified "LoadRecentBranchRevisions" and "MergeCalculatorTask" tasks
Removed "LoadRecentBranchRevisions"
This commit is contained in:
@@ -1,123 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2014 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.idea.svn.integrate;
|
||||
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.PairFunction;
|
||||
import com.intellij.util.continuation.Where;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.svn.history.LogHierarchyNode;
|
||||
import org.jetbrains.idea.svn.history.SvnChangeList;
|
||||
import org.jetbrains.idea.svn.history.SvnCommittedChangesProvider;
|
||||
import org.jetbrains.idea.svn.history.SvnRepositoryLocation;
|
||||
import org.jetbrains.idea.svn.mergeinfo.MergeChecker;
|
||||
import org.jetbrains.idea.svn.mergeinfo.OneShotMergeInfoHelper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.intellij.openapi.progress.ProgressManager.progress;
|
||||
import static com.intellij.util.containers.ContainerUtil.newArrayList;
|
||||
import static java.lang.Math.min;
|
||||
|
||||
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 boolean myLastLoaded;
|
||||
@NotNull private final Consumer<LoadRecentBranchRevisions> myCallback;
|
||||
@NotNull private final OneShotMergeInfoHelper myMergeChecker;
|
||||
@NotNull private final List<SvnChangeList> myCommittedChangeLists;
|
||||
|
||||
public LoadRecentBranchRevisions(@NotNull QuickMerge mergeProcess, @NotNull Consumer<LoadRecentBranchRevisions> callback) {
|
||||
super(mergeProcess, "Loading recent " + mergeProcess.getMergeContext().getBranchName() + " revisions", Where.POOLED);
|
||||
myCallback = callback;
|
||||
myCommittedChangeLists = newArrayList();
|
||||
myMergeChecker = new OneShotMergeInfoHelper(myMergeContext);
|
||||
}
|
||||
|
||||
public boolean isLastLoaded() {
|
||||
return myLastLoaded;
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Try to unify collecting and filtering change lists with similar logic in MergeCalculatorTask.
|
||||
*/
|
||||
@Override
|
||||
public void run() throws VcsException {
|
||||
progress("Collecting merge information");
|
||||
myMergeChecker.prepare();
|
||||
|
||||
Pair<List<SvnChangeList>, Boolean> loadResult = loadChangeLists(myMergeContext, -1, getBunchSize(-1));
|
||||
myCommittedChangeLists.addAll(loadResult.first);
|
||||
myLastLoaded = loadResult.second;
|
||||
|
||||
myCallback.consume(this);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Pair<List<SvnChangeList>, Boolean> loadChangeLists(@NotNull MergeContext mergeContext, long beforeRevision, int size)
|
||||
throws VcsException {
|
||||
ChangeBrowserSettings settings = new ChangeBrowserSettings();
|
||||
if (beforeRevision > 0) {
|
||||
settings.CHANGE_BEFORE = String.valueOf(beforeRevision);
|
||||
settings.USE_CHANGE_BEFORE_FILTER = true;
|
||||
}
|
||||
|
||||
List<SvnChangeList> changeLists = getChangeLists(mergeContext, settings, beforeRevision, size, (changeList, tree) -> changeList);
|
||||
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 <T> List<T> getChangeLists(@NotNull MergeContext mergeContext,
|
||||
@NotNull ChangeBrowserSettings settings,
|
||||
long revisionToExclude,
|
||||
int size,
|
||||
@NotNull PairFunction<SvnChangeList, LogHierarchyNode, T> resultProvider) throws VcsException {
|
||||
List<T> result = newArrayList();
|
||||
|
||||
((SvnCommittedChangesProvider)mergeContext.getVcs().getCommittedChangesProvider())
|
||||
.getCommittedChangesWithMergedRevisons(settings, new SvnRepositoryLocation(mergeContext.getSourceUrl()),
|
||||
size + (revisionToExclude > 0 ? 2 : 1),
|
||||
(changeList, tree) -> {
|
||||
if (revisionToExclude != changeList.getNumber()) {
|
||||
result.add(resultProvider.fun(changeList, tree));
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public MergeChecker getMergeChecker() {
|
||||
return myMergeChecker;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public List<SvnChangeList> getChangeLists() {
|
||||
return myCommittedChangeLists;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -32,8 +32,8 @@ public class MergeAllOrSelectedChooserTask extends BaseMergeTask {
|
||||
next(getMergeAllTasks(true));
|
||||
break;
|
||||
case showLatest:
|
||||
next(new LoadRecentBranchRevisions(myMergeProcess, task ->
|
||||
next(new ShowRevisionSelector(myMergeProcess, task.getChangeLists(), task.getMergeChecker(), false, task.isLastLoaded()))));
|
||||
next(new MergeCalculatorTask(myMergeProcess, task ->
|
||||
next(new ShowRevisionSelector(myMergeProcess, task.getChangeLists(), task.getMergeChecker(), false, task.areAllListsLoaded()))));
|
||||
break;
|
||||
case select:
|
||||
next(new LookForBranchOriginTask(myMergeProcess, false, copyPoint ->
|
||||
|
||||
@@ -19,8 +19,10 @@ import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.PairFunction;
|
||||
import com.intellij.util.continuation.Where;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.svn.history.LogHierarchyNode;
|
||||
import org.jetbrains.idea.svn.history.SvnChangeList;
|
||||
import org.jetbrains.idea.svn.history.SvnCommittedChangesProvider;
|
||||
@@ -33,29 +35,49 @@ import java.util.List;
|
||||
import static com.intellij.openapi.progress.ProgressManager.progress;
|
||||
import static com.intellij.openapi.progress.ProgressManager.progress2;
|
||||
import static com.intellij.util.containers.ContainerUtil.newArrayList;
|
||||
import static java.lang.Math.min;
|
||||
import static org.jetbrains.idea.svn.SvnBundle.message;
|
||||
import static org.jetbrains.idea.svn.mergeinfo.SvnMergeInfoCache.MergeCheckResult;
|
||||
|
||||
public class MergeCalculatorTask extends BaseMergeTask {
|
||||
|
||||
@NotNull private final SvnBranchPointsCalculator.WrapperInvertor myCopyPoint;
|
||||
public static final String PROP_BUNCH_SIZE = "idea.svn.quick.merge.bunch.size";
|
||||
private final static int BUNCH_SIZE = 100;
|
||||
|
||||
@Nullable private final SvnBranchPointsCalculator.WrapperInvertor myCopyPoint;
|
||||
@NotNull private final OneShotMergeInfoHelper myMergeChecker;
|
||||
@NotNull private final List<SvnChangeList> myNotMergedChangeLists;
|
||||
@NotNull private final List<SvnChangeList> myChangeLists;
|
||||
@NotNull private final Consumer<MergeCalculatorTask> myCallback;
|
||||
private boolean myAllListsLoaded;
|
||||
|
||||
public MergeCalculatorTask(@NotNull QuickMerge mergeProcess, @NotNull Consumer<MergeCalculatorTask> callback) {
|
||||
this(mergeProcess, "Loading recent " + mergeProcess.getMergeContext().getBranchName() + " revisions", null, callback);
|
||||
}
|
||||
|
||||
public MergeCalculatorTask(@NotNull QuickMerge mergeProcess,
|
||||
@NotNull SvnBranchPointsCalculator.WrapperInvertor copyPoint,
|
||||
@NotNull Consumer<MergeCalculatorTask> callback) {
|
||||
super(mergeProcess, "Filtering " + mergeProcess.getMergeContext().getBranchName() + " revisions", Where.POOLED);
|
||||
this(mergeProcess, "Filtering " + mergeProcess.getMergeContext().getBranchName() + " revisions", copyPoint, callback);
|
||||
}
|
||||
|
||||
private MergeCalculatorTask(@NotNull QuickMerge mergeProcess,
|
||||
@NotNull String title,
|
||||
@Nullable SvnBranchPointsCalculator.WrapperInvertor copyPoint,
|
||||
@NotNull Consumer<MergeCalculatorTask> callback) {
|
||||
super(mergeProcess, title, Where.POOLED);
|
||||
myCopyPoint = copyPoint;
|
||||
myCallback = callback;
|
||||
myNotMergedChangeLists = newArrayList();
|
||||
myChangeLists = newArrayList();
|
||||
// TODO: Previously it was configurable - either to use OneShotMergeInfoHelper or BranchInfo as merge checker, but later that logic
|
||||
// TODO: was commented (in 80ebdbfea5210f6c998e67ddf28ca9c670fa4efe on 5/28/2010).
|
||||
// TODO: Still check if we need to preserve such configuration or it is sufficient to always use OneShotMergeInfoHelper.
|
||||
myMergeChecker = new OneShotMergeInfoHelper(myMergeContext);
|
||||
}
|
||||
|
||||
public boolean areAllListsLoaded() {
|
||||
return myAllListsLoaded;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public MergeChecker getMergeChecker() {
|
||||
return myMergeChecker;
|
||||
@@ -63,7 +85,7 @@ public class MergeCalculatorTask extends BaseMergeTask {
|
||||
|
||||
@NotNull
|
||||
public List<SvnChangeList> getChangeLists() {
|
||||
return myNotMergedChangeLists;
|
||||
return myChangeLists;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -71,8 +93,18 @@ public class MergeCalculatorTask extends BaseMergeTask {
|
||||
progress("Collecting merge information");
|
||||
myMergeChecker.prepare();
|
||||
|
||||
myNotMergedChangeLists.addAll(getNotMergedChangeLists(getChangeListsAfter(myCopyPoint.getTrue().getTargetRevision())));
|
||||
if (!myNotMergedChangeLists.isEmpty()) {
|
||||
if (myCopyPoint != null) {
|
||||
myChangeLists.addAll(getNotMergedChangeLists(getChangeListsAfter(myCopyPoint.getTrue().getTargetRevision())));
|
||||
myAllListsLoaded = true;
|
||||
}
|
||||
else {
|
||||
Pair<List<SvnChangeList>, Boolean> loadResult = loadChangeLists(myMergeContext, -1, getBunchSize(-1));
|
||||
|
||||
myChangeLists.addAll(loadResult.first);
|
||||
myAllListsLoaded = loadResult.second;
|
||||
}
|
||||
|
||||
if (!myChangeLists.isEmpty()) {
|
||||
myCallback.consume(this);
|
||||
}
|
||||
else {
|
||||
@@ -81,27 +113,12 @@ public class MergeCalculatorTask extends BaseMergeTask {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<Pair<SvnChangeList, LogHierarchyNode>> getChangeListsAfter(final long revision) {
|
||||
private List<Pair<SvnChangeList, LogHierarchyNode>> getChangeListsAfter(long revision) throws VcsException {
|
||||
ChangeBrowserSettings settings = new ChangeBrowserSettings();
|
||||
settings.CHANGE_AFTER = Long.toString(revision);
|
||||
settings.USE_CHANGE_AFTER_FILTER = true;
|
||||
|
||||
List<Pair<SvnChangeList, LogHierarchyNode>> result = newArrayList();
|
||||
|
||||
try {
|
||||
((SvnCommittedChangesProvider)myMergeContext.getVcs().getCommittedChangesProvider())
|
||||
.getCommittedChangesWithMergedRevisons(settings, new SvnRepositoryLocation(myMergeContext.getSourceUrl()), 0,
|
||||
(changeList, tree) -> {
|
||||
if (revision < changeList.getNumber()) {
|
||||
result.add(Pair.create(changeList, tree));
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (VcsException e) {
|
||||
end("Checking revisions for merge fault", e);
|
||||
}
|
||||
|
||||
return result;
|
||||
return getChangeLists(myMergeContext, settings, revision, -1, Pair::create);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -120,4 +137,45 @@ public class MergeCalculatorTask extends BaseMergeTask {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Pair<List<SvnChangeList>, Boolean> loadChangeLists(@NotNull MergeContext mergeContext, long beforeRevision, int size)
|
||||
throws VcsException {
|
||||
ChangeBrowserSettings settings = new ChangeBrowserSettings();
|
||||
if (beforeRevision > 0) {
|
||||
settings.CHANGE_BEFORE = String.valueOf(beforeRevision);
|
||||
settings.USE_CHANGE_BEFORE_FILTER = true;
|
||||
}
|
||||
|
||||
List<SvnChangeList> changeLists = getChangeLists(mergeContext, settings, beforeRevision, size, (changeList, tree) -> changeList);
|
||||
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 <T> List<T> getChangeLists(@NotNull MergeContext mergeContext,
|
||||
@NotNull ChangeBrowserSettings settings,
|
||||
long revisionToExclude,
|
||||
int size,
|
||||
@NotNull PairFunction<SvnChangeList, LogHierarchyNode, T> resultProvider) throws VcsException {
|
||||
List<T> result = newArrayList();
|
||||
|
||||
((SvnCommittedChangesProvider)mergeContext.getVcs().getCommittedChangesProvider())
|
||||
.getCommittedChangesWithMergedRevisons(settings, new SvnRepositoryLocation(mergeContext.getSourceUrl()),
|
||||
size > 0 ? size + (revisionToExclude > 0 ? 2 : 1) : 0,
|
||||
(changeList, tree) -> {
|
||||
if (revisionToExclude != changeList.getNumber()) {
|
||||
result.add(resultProvider.fun(changeList, tree));
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,8 +69,8 @@ import static com.intellij.util.containers.ContainerUtilRt.emptyList;
|
||||
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;
|
||||
import static org.jetbrains.idea.svn.integrate.MergeCalculatorTask.getBunchSize;
|
||||
import static org.jetbrains.idea.svn.integrate.MergeCalculatorTask.loadChangeLists;
|
||||
|
||||
public class ToBeMergedDialog extends DialogWrapper {
|
||||
public static final int MERGE_ALL_CODE = 222;
|
||||
|
||||
Reference in New Issue
Block a user