mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
svn: Moved "load more change lists" logic directly to "ToBeMergedDialog"
This commit is contained in:
+8
-15
@@ -74,18 +74,16 @@ public class LoadRecentBranchRevisions extends TaskDescriptor {
|
||||
*/
|
||||
@Override
|
||||
public void run(ContinuationContext context) {
|
||||
List<Pair<SvnChangeList, LogHierarchyNode>> changeLists = null;
|
||||
|
||||
try {
|
||||
changeLists = getChangeListsBefore(myFirst);
|
||||
run();
|
||||
}
|
||||
catch (VcsException e) {
|
||||
context.handleException(e, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (changeLists != null) {
|
||||
initialize(context, changeLists);
|
||||
}
|
||||
public void run() throws VcsException {
|
||||
initialize(getChangeListsBefore(myFirst));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -131,17 +129,12 @@ public class LoadRecentBranchRevisions extends TaskDescriptor {
|
||||
return result;
|
||||
}
|
||||
|
||||
private void initialize(@NotNull ContinuationContext context, @NotNull List<Pair<SvnChangeList, LogHierarchyNode>> changeLists) {
|
||||
private void initialize(@NotNull List<Pair<SvnChangeList, LogHierarchyNode>> changeLists) throws VcsException {
|
||||
myCommittedChangeLists = getNotMergedChangeLists(changeLists);
|
||||
|
||||
try {
|
||||
myHelper = new OneShotMergeInfoHelper(myMergeContext);
|
||||
ProgressManager.progress2("Calculating not merged revisions");
|
||||
myHelper.prepare();
|
||||
}
|
||||
catch (VcsException e) {
|
||||
context.handleException(e, true);
|
||||
}
|
||||
myHelper = new OneShotMergeInfoHelper(myMergeContext);
|
||||
ProgressManager.progress2("Calculating not merged revisions");
|
||||
myHelper.prepare();
|
||||
|
||||
myLastLoaded = myCommittedChangeLists.size() < myBunchSize + 1;
|
||||
if (myCommittedChangeLists.size() > myBunchSize) {
|
||||
|
||||
@@ -18,9 +18,7 @@ package org.jetbrains.idea.svn.integrate;
|
||||
import com.intellij.openapi.vcs.FilePath;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
|
||||
import com.intellij.util.PairConsumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.svn.dialogs.MergeDialogI;
|
||||
import org.jetbrains.idea.svn.mergeinfo.MergeChecker;
|
||||
|
||||
import java.util.List;
|
||||
@@ -51,7 +49,6 @@ public interface QuickMergeInteraction {
|
||||
@NotNull
|
||||
List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
|
||||
@NotNull MergeChecker mergeChecker,
|
||||
@NotNull PairConsumer<Long, MergeDialogI> loader,
|
||||
boolean everyThingLoaded);
|
||||
|
||||
interface SelectMergeItemsResult {
|
||||
|
||||
+3
-8
@@ -24,10 +24,8 @@ import com.intellij.openapi.vcs.FilePath;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier;
|
||||
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
|
||||
import com.intellij.util.PairConsumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.svn.dialogs.IntersectingLocalChangesPanel;
|
||||
import org.jetbrains.idea.svn.dialogs.MergeDialogI;
|
||||
import org.jetbrains.idea.svn.mergeinfo.MergeChecker;
|
||||
|
||||
import java.util.List;
|
||||
@@ -82,7 +80,7 @@ public class QuickMergeInteractionImpl implements QuickMergeInteraction {
|
||||
public SelectMergeItemsResult selectMergeItems(@NotNull List<CommittedChangeList> lists,
|
||||
@NotNull String mergeTitle,
|
||||
@NotNull MergeChecker mergeChecker) {
|
||||
ToBeMergedDialog dialog = new ToBeMergedDialog(myProject, lists, mergeTitle, mergeChecker, null);
|
||||
ToBeMergedDialog dialog = new ToBeMergedDialog(myMergeContext, lists, mergeTitle, mergeChecker, true);
|
||||
dialog.show();
|
||||
|
||||
return new SelectMergeItemsResult() {
|
||||
@@ -145,12 +143,9 @@ public class QuickMergeInteractionImpl implements QuickMergeInteraction {
|
||||
@Override
|
||||
public List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
|
||||
@NotNull MergeChecker mergeChecker,
|
||||
@NotNull PairConsumer<Long, MergeDialogI> loader,
|
||||
boolean everyThingLoaded) {
|
||||
ToBeMergedDialog dialog = new ToBeMergedDialog(myProject, list, myMergeContext.getTitle(), mergeChecker, loader);
|
||||
if (everyThingLoaded) {
|
||||
dialog.setEverythingLoaded(true);
|
||||
}
|
||||
ToBeMergedDialog dialog = new ToBeMergedDialog(myMergeContext, list, myMergeContext.getTitle(), mergeChecker, false);
|
||||
|
||||
return dialog.showAndGet() ? dialog.getSelected() : emptyList();
|
||||
}
|
||||
|
||||
|
||||
@@ -15,20 +15,11 @@
|
||||
*/
|
||||
package org.jetbrains.idea.svn.integrate;
|
||||
|
||||
import com.intellij.openapi.ui.MessageType;
|
||||
import com.intellij.openapi.ui.popup.util.PopupUtil;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.PairConsumer;
|
||||
import com.intellij.util.continuation.Continuation;
|
||||
import com.intellij.util.continuation.ContinuationContext;
|
||||
import com.intellij.util.continuation.TaskDescriptor;
|
||||
import com.intellij.util.continuation.Where;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.svn.dialogs.MergeDialogI;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -48,10 +39,9 @@ public class ShowRecentInDialogTask extends BaseMergeTask {
|
||||
|
||||
@Override
|
||||
public void run(ContinuationContext context) {
|
||||
List<CommittedChangeList> lists = myInteraction.showRecentListsForSelection(myInitialChangeListsLoader.getCommittedChangeLists(),
|
||||
myInitialChangeListsLoader.getHelper(),
|
||||
createMoreChangeListsLoader(),
|
||||
myInitialChangeListsLoader.isLastLoaded());
|
||||
List<CommittedChangeList> lists = myInteraction
|
||||
.showRecentListsForSelection(myInitialChangeListsLoader.getCommittedChangeLists(), myInitialChangeListsLoader.getHelper(),
|
||||
myInitialChangeListsLoader.isLastLoaded());
|
||||
|
||||
if (!lists.isEmpty()) {
|
||||
runChangeListsMerge(context, lists, createBranchCopyPoint(), myMergeContext.getTitle());
|
||||
@@ -61,51 +51,9 @@ public class ShowRecentInDialogTask extends BaseMergeTask {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private PairConsumer<Long, MergeDialogI> createMoreChangeListsLoader() {
|
||||
return new PairConsumer<Long, MergeDialogI>() {
|
||||
|
||||
@Override
|
||||
public void consume(@NotNull Long bunchSize, @NotNull MergeDialogI dialog) {
|
||||
LoadRecentBranchRevisions loader = new LoadRecentBranchRevisions(myMergeContext, dialog.getLastNumber(), bunchSize.intValue());
|
||||
TaskDescriptor updater = createUpdateDialogTask(dialog, loader);
|
||||
|
||||
Continuation fragmented = Continuation.createFragmented(myMergeContext.getProject(), true);
|
||||
fragmented.addExceptionHandler(VcsException.class, new Consumer<VcsException>() {
|
||||
@Override
|
||||
public void consume(VcsException e) {
|
||||
PopupUtil.showBalloonForActiveComponent(e.getMessage() == null ? e.getClass().getName() : e.getMessage(), MessageType.ERROR);
|
||||
}
|
||||
});
|
||||
fragmented.run(loader, updater);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private SvnBranchPointsCalculator.WrapperInvertor createBranchCopyPoint() {
|
||||
return new SvnBranchPointsCalculator.WrapperInvertor(false, new SvnBranchPointsCalculator.BranchCopyData(
|
||||
myMergeContext.getWcInfo().getUrl().toString(), -1, myMergeContext.getSourceUrl(), -1));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static TaskDescriptor createUpdateDialogTask(@NotNull final MergeDialogI dialog,
|
||||
@NotNull final LoadRecentBranchRevisions loader) {
|
||||
return new TaskDescriptor("", Where.AWT) {
|
||||
|
||||
@Override
|
||||
public void run(ContinuationContext context) {
|
||||
dialog.addMoreLists(loader.getCommittedChangeLists());
|
||||
if (loader.isLastLoaded()) {
|
||||
dialog.setEverythingLoaded(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void canceled() {
|
||||
dialog.addMoreLists(Collections.<CommittedChangeList>emptyList());
|
||||
dialog.setEverythingLoaded(true);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,13 +18,17 @@ package org.jetbrains.idea.svn.integrate;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.DumbAwareAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.MessageType;
|
||||
import com.intellij.openapi.ui.Splitter;
|
||||
import com.intellij.openapi.ui.popup.util.PopupUtil;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.vcs.QuantitySelection;
|
||||
import com.intellij.openapi.vcs.SelectionResult;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vcs.changes.Change;
|
||||
import com.intellij.openapi.vcs.changes.committed.CommittedChangeListRenderer;
|
||||
import com.intellij.openapi.vcs.changes.committed.CommittedChangesTreeBrowser;
|
||||
@@ -39,7 +43,6 @@ import com.intellij.ui.SimpleTextAttributes;
|
||||
import com.intellij.ui.TableViewSpeedSearch;
|
||||
import com.intellij.ui.table.TableView;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.PairConsumer;
|
||||
import com.intellij.util.ui.ColumnInfo;
|
||||
import com.intellij.util.ui.ListTableModel;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
@@ -69,7 +72,9 @@ import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.intellij.util.containers.ContainerUtil.*;
|
||||
import static com.intellij.util.containers.ContainerUtil.newHashMap;
|
||||
import static com.intellij.util.containers.ContainerUtilRt.emptyList;
|
||||
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;
|
||||
@@ -77,7 +82,7 @@ import static java.util.Collections.synchronizedMap;
|
||||
public class ToBeMergedDialog extends DialogWrapper implements MergeDialogI {
|
||||
public static final int MERGE_ALL_CODE = 222;
|
||||
private final JPanel myPanel;
|
||||
private final Project myProject;
|
||||
@NotNull private final MergeContext myMergeContext;
|
||||
private final PageEngine<List<CommittedChangeList>> myListsEngine;
|
||||
private TableView<CommittedChangeList> myRevisionsList;
|
||||
private RepositoryChangesBrowser myRepositoryChangesBrowser;
|
||||
@@ -86,7 +91,6 @@ public class ToBeMergedDialog extends DialogWrapper implements MergeDialogI {
|
||||
private final QuantitySelection<Long> myWiseSelection;
|
||||
|
||||
private final Set<Change> myAlreadyMerged;
|
||||
private final PairConsumer<Long, MergeDialogI> myMoreLoader;
|
||||
private final MergeChecker myMergeChecker;
|
||||
private final boolean myAlreadyCalculatedState;
|
||||
private volatile boolean myEverythingLoaded;
|
||||
@@ -95,19 +99,18 @@ public class ToBeMergedDialog extends DialogWrapper implements MergeDialogI {
|
||||
private ToBeMergedDialog.MoreXAction myMore100Action;
|
||||
private ToBeMergedDialog.MoreXAction myMore500Action;
|
||||
|
||||
public ToBeMergedDialog(final Project project,
|
||||
public ToBeMergedDialog(@NotNull MergeContext mergeContext,
|
||||
@NotNull List<CommittedChangeList> lists,
|
||||
final String title,
|
||||
@NotNull MergeChecker mergeChecker,
|
||||
final PairConsumer<Long, MergeDialogI> moreLoader) {
|
||||
super(project, true);
|
||||
myMoreLoader = moreLoader;
|
||||
myEverythingLoaded = moreLoader == null;
|
||||
boolean everythingLoaded) {
|
||||
super(mergeContext.getProject(), true);
|
||||
myMergeContext = mergeContext;
|
||||
myEverythingLoaded = everythingLoaded;
|
||||
myStatusMap = synchronizedMap(newHashMap());
|
||||
myMergeChecker = mergeChecker;
|
||||
myAlreadyCalculatedState = moreLoader == null;
|
||||
myAlreadyCalculatedState = everythingLoaded;
|
||||
setTitle(title);
|
||||
myProject = project;
|
||||
|
||||
// Paging is not used - "Load Xxx" buttons load corresponding new elements and add them to the end of the table. Single (first) page is
|
||||
// always used.
|
||||
@@ -338,7 +341,8 @@ public class ToBeMergedDialog extends DialogWrapper implements MergeDialogI {
|
||||
flatModel.setItems(myListsEngine.getCurrent());
|
||||
flatModel.fireTableDataChanged();
|
||||
|
||||
myRepositoryChangesBrowser = new RepositoryChangesBrowser(myProject, Collections.<CommittedChangeList>emptyList(), emptyList(), null);
|
||||
myRepositoryChangesBrowser =
|
||||
new RepositoryChangesBrowser(myMergeContext.getProject(), Collections.<CommittedChangeList>emptyList(), emptyList(), null);
|
||||
myRepositoryChangesBrowser.getDiffAction()
|
||||
.registerCustomShortcutSet(myRepositoryChangesBrowser.getDiffAction().getShortcutSet(), myRevisionsList);
|
||||
setChangesDecorator();
|
||||
@@ -446,7 +450,8 @@ public class ToBeMergedDialog extends DialogWrapper implements MergeDialogI {
|
||||
myMore500Action.setVisible(false);
|
||||
myMore100Action.setEnabled(false);
|
||||
myMore500Action.setEnabled(false);
|
||||
myMoreLoader.consume(Long.valueOf(myQuantity), ToBeMergedDialog.this);
|
||||
|
||||
new LoadChangeListsTask(getLastNumber(), myQuantity).queue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -474,6 +479,59 @@ public class ToBeMergedDialog extends DialogWrapper implements MergeDialogI {
|
||||
}
|
||||
}
|
||||
|
||||
private class LoadChangeListsTask extends Task.Backgroundable {
|
||||
|
||||
private final long myStartNumber;
|
||||
private final int myQuantity;
|
||||
private List<CommittedChangeList> myLists;
|
||||
private boolean myIsLastListLoaded;
|
||||
|
||||
public LoadChangeListsTask(long startNumber, int quantity) {
|
||||
super(myMergeContext.getProject(), "Loading recent " + myMergeContext.getBranchName() + " revisions", true);
|
||||
myStartNumber = startNumber;
|
||||
myQuantity = quantity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(@NotNull ProgressIndicator indicator) {
|
||||
LoadRecentBranchRevisions loader = new LoadRecentBranchRevisions(myMergeContext, myStartNumber, myQuantity);
|
||||
|
||||
try {
|
||||
loader.run();
|
||||
|
||||
myLists = loader.getCommittedChangeLists();
|
||||
myIsLastListLoaded = loader.isLastLoaded();
|
||||
}
|
||||
catch (VcsException e) {
|
||||
setEmptyData();
|
||||
PopupUtil.showBalloonForActiveComponent(e.getMessage(), MessageType.ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
setEmptyData();
|
||||
updateDialog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
updateDialog();
|
||||
}
|
||||
|
||||
private void setEmptyData() {
|
||||
myLists = emptyList();
|
||||
myIsLastListLoaded = false;
|
||||
}
|
||||
|
||||
private void updateDialog() {
|
||||
addMoreLists(myLists);
|
||||
if (myIsLastListLoaded) {
|
||||
setEverythingLoaded(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class MyListCellRenderer implements TableCellRenderer {
|
||||
private final JPanel myPanel;
|
||||
private final CommittedChangeListRenderer myRenderer;
|
||||
@@ -484,7 +542,7 @@ public class ToBeMergedDialog extends DialogWrapper implements MergeDialogI {
|
||||
myCheckBox = new JCheckBox();
|
||||
myCheckBox.setEnabled(true);
|
||||
myCheckBox.setSelected(true);
|
||||
myRenderer = new CommittedChangeListRenderer(myProject, singletonList(list -> {
|
||||
myRenderer = new CommittedChangeListRenderer(myMergeContext.getProject(), singletonList(list -> {
|
||||
ListMergeStatus status = myAlreadyCalculatedState
|
||||
? ListMergeStatus.NOT_MERGED
|
||||
: ObjectUtils.notNull(myStatusMap.get(list.getNumber()), ListMergeStatus.REFRESHING);
|
||||
|
||||
@@ -18,9 +18,7 @@ package org.jetbrains.idea.svn;
|
||||
import com.intellij.openapi.vcs.FilePath;
|
||||
import com.intellij.openapi.vcs.VcsException;
|
||||
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
|
||||
import com.intellij.util.PairConsumer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.svn.dialogs.MergeDialogI;
|
||||
import org.jetbrains.idea.svn.integrate.LocalChangesAction;
|
||||
import org.jetbrains.idea.svn.integrate.QuickMergeContentsVariants;
|
||||
import org.jetbrains.idea.svn.integrate.QuickMergeInteraction;
|
||||
@@ -87,7 +85,6 @@ public class QuickMergeTestInteraction implements QuickMergeInteraction {
|
||||
@Override
|
||||
public List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
|
||||
@NotNull MergeChecker mergeChecker,
|
||||
@NotNull PairConsumer<Long, MergeDialogI> loader,
|
||||
boolean everyThingLoaded) {
|
||||
return emptyList();
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@ import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager;
|
||||
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.PairConsumer;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.concurrency.Semaphore;
|
||||
import com.intellij.util.continuation.ContinuationContext;
|
||||
@@ -38,7 +37,6 @@ import org.jetbrains.idea.svn.branchConfig.InfoReliability;
|
||||
import org.jetbrains.idea.svn.branchConfig.InfoStorage;
|
||||
import org.jetbrains.idea.svn.branchConfig.SvnBranchConfigurationManager;
|
||||
import org.jetbrains.idea.svn.branchConfig.SvnBranchConfigurationNew;
|
||||
import org.jetbrains.idea.svn.dialogs.MergeDialogI;
|
||||
import org.jetbrains.idea.svn.dialogs.WCInfo;
|
||||
import org.jetbrains.idea.svn.integrate.MergeContext;
|
||||
import org.jetbrains.idea.svn.integrate.QuickMerge;
|
||||
@@ -178,7 +176,6 @@ public class SvnQuickMergeTest extends Svn17TestCase {
|
||||
@Override
|
||||
public List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
|
||||
@NotNull MergeChecker mergeChecker,
|
||||
@NotNull PairConsumer<Long, MergeDialogI> loader,
|
||||
boolean everyThingLoaded) {
|
||||
if (list.size() != 4) {
|
||||
selectionError.set("List size: " + list.size());
|
||||
@@ -265,7 +262,6 @@ public class SvnQuickMergeTest extends Svn17TestCase {
|
||||
@Override
|
||||
public List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
|
||||
@NotNull MergeChecker mergeChecker,
|
||||
@NotNull PairConsumer<Long, MergeDialogI> loader,
|
||||
boolean everyThingLoaded) {
|
||||
if (list.size() != 2) {
|
||||
selectionError.set("List size: " + list.size());
|
||||
|
||||
Reference in New Issue
Block a user