From 93da19c3203872e4d05e075a1df764dd490f4f1a Mon Sep 17 00:00:00 2001 From: irengrig Date: Wed, 25 Jul 2012 19:56:02 +0400 Subject: [PATCH] VCS: correctly put "after update" local history label only after text merge conflicts are resolved also wrap merge text conflict actions into commands to be revertable and better presented in local history --- .../diff/impl/mergeTool/MergeVersion.java | 7 +++- .../vcs/merge/MultipleFileMergeDialog.java | 32 +++++++++++-------- .../update/AbstractCommonUpdateAction.java | 6 ++-- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/mergeTool/MergeVersion.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/mergeTool/MergeVersion.java index f07f133cfe86..bc3e7784117e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/mergeTool/MergeVersion.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/mergeTool/MergeVersion.java @@ -90,7 +90,12 @@ public interface MergeVersion { public void applyText(final String text, final Project project) { ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { - doApplyText(text, project); + CommandProcessor.getInstance().executeCommand(project, new Runnable() { + @Override + public void run() { + doApplyText(text, project); + } + }, "Merge changes", null); } }); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java index 1fe8cf89fe14..ff4c188b847c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/merge/MultipleFileMergeDialog.java @@ -19,6 +19,7 @@ package com.intellij.openapi.vcs.merge; import com.intellij.CommonBundle; import com.intellij.ide.presentation.VirtualFilePresentation; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.diff.ActionButtonPresentation; import com.intellij.openapi.diff.DiffManager; import com.intellij.openapi.diff.DiffRequestFactory; @@ -221,22 +222,27 @@ public class MultipleFileMergeDialog extends DialogWrapper { final Ref ex = new Ref(); ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { - try { - if (!(myProvider instanceof MergeProvider2) || myMergeSession.canMerge(file)) { - MergeData data = myProvider.loadRevisions(file); - if (isCurrent) { - file.setBinaryContent(data.CURRENT); + CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { + @Override + public void run() { + try { + if (!(myProvider instanceof MergeProvider2) || myMergeSession.canMerge(file)) { + MergeData data = myProvider.loadRevisions(file); + if (isCurrent) { + file.setBinaryContent(data.CURRENT); + } + else { + file.setBinaryContent(data.LAST); + checkMarkModifiedProject(file); + } + } + markFileProcessed(file, isCurrent ? MergeSession.Resolution.AcceptedYours : MergeSession.Resolution.AcceptedTheirs); } - else { - file.setBinaryContent(data.LAST); - checkMarkModifiedProject(file); + catch (Exception e) { + ex.set(e); } } - markFileProcessed(file, isCurrent ? MergeSession.Resolution.AcceptedYours : MergeSession.Resolution.AcceptedTheirs); - } - catch (Exception e) { - ex.set(e); - } + }, "Accept " + (isCurrent ? "Yours" : "Theirs"), null); } }); if (!ex.isNull()) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/update/AbstractCommonUpdateAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/update/AbstractCommonUpdateAction.java index d0a300d97200..2cfb117b2719 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/update/AbstractCommonUpdateAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/update/AbstractCommonUpdateAction.java @@ -388,9 +388,6 @@ public abstract class AbstractCommonUpdateAction extends AbstractVcsAction { ProgressManager.progress(VcsBundle.message("progress.text.synchronizing.files")); doVfsRefresh(); } finally { - if (myProject.isOpen() && (! myProject.isDisposed())) { // not sure - myAfter = LocalHistory.getInstance().putSystemLabel(myProject, "After update"); - } myProjectLevelVcsManager.stopBackgroundVcsOperation(); myProject.getMessageBus().syncPublisher(UpdatedFilesListener.UPDATED_FILES). consume(UpdatedFilesReverseSide.getPathsFromUpdatedFiles(myUpdatedFiles)); @@ -480,9 +477,12 @@ public abstract class AbstractCommonUpdateAction extends AbstractVcsAction { final boolean continueChainFinal = continueChain; final boolean someSessionWasCancelled = wasCanceled || someSessionWasCanceled(myUpdateSessions); + // here text conflicts might be interactively resolved for (final UpdateSession updateSession : myUpdateSessions) { updateSession.onRefreshFilesCompleted(); } + // only after conflicts are resolved, put a label + myAfter = LocalHistory.getInstance().putSystemLabel(myProject, "After update"); if (myActionInfo.canChangeFileStatus()) { final List files = new ArrayList();