From 770b62ad9754aaf58fb95060955238b4741302a4 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Sun, 8 Apr 2012 16:33:30 +0400 Subject: [PATCH] CherryPicker: update ChangeListManager synchronously; show commit dialog in AWT --- .../history/browser/CherryPicker.java | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/plugins/git4idea/src/git4idea/history/browser/CherryPicker.java b/plugins/git4idea/src/git4idea/history/browser/CherryPicker.java index 4ff939ab4342..4290878463af 100644 --- a/plugins/git4idea/src/git4idea/history/browser/CherryPicker.java +++ b/plugins/git4idea/src/git4idea/history/browser/CherryPicker.java @@ -26,6 +26,7 @@ import com.intellij.openapi.vcs.checkin.CheckinEnvironment; import com.intellij.openapi.vcs.history.VcsRevisionNumber; import com.intellij.openapi.vcs.merge.MergeDialogCustomizer; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.ui.GuiUtils; import com.intellij.util.ArrayUtil; import com.intellij.util.Consumer; import git4idea.PlatformFacade; @@ -38,6 +39,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.event.HyperlinkEvent; import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import static git4idea.commands.GitSimpleEventDetector.Event.CHERRY_PICK_CONFLICT; @@ -135,16 +137,23 @@ public class CherryPicker { private LocalChangeList createChangeListAfterUpdate(@NotNull final List changes, @NotNull final Collection paths, @NotNull final String commitMessage) { final AtomicReference changeList = new AtomicReference(); - myChangeListManager.invokeAfterUpdate(new Runnable() { + GuiUtils.invokeAndWaitIfNeeded(new Runnable() { + @Override public void run() { - changeList.set(createChangeList(changes, commitMessage)); - } - }, InvokeAfterUpdateMode.SILENT, "", new Consumer() { - public void consume(VcsDirtyScopeManager vcsDirtyScopeManager) { - vcsDirtyScopeManager.filePathsDirty(paths, null); + myChangeListManager.invokeAfterUpdate(new Runnable() { + public void run() { + changeList.set(createChangeList(changes, commitMessage)); + } + }, InvokeAfterUpdateMode.SYNCHRONOUS_NOT_CANCELLABLE, "", + new Consumer() { + public void consume(VcsDirtyScopeManager vcsDirtyScopeManager) { + vcsDirtyScopeManager.filePathsDirty(paths, null); + } + }, ModalityState.current()); } }, ModalityState.NON_MODAL); + return changeList.get(); } @@ -156,8 +165,16 @@ public class CherryPicker { return message; } - private boolean showCommitDialog(@NotNull GitCommit commit, @NotNull LocalChangeList changeList, @NotNull String commitMessage) { - return myPlatformFacade.getVcsHelper(myProject).commitChanges(commit.getChanges(), changeList, commitMessage); + private boolean showCommitDialog(@NotNull final GitCommit commit, @NotNull final LocalChangeList changeList, + @NotNull final String commitMessage) { + final AtomicBoolean commitSucceeded = new AtomicBoolean(); + GuiUtils.invokeAndWaitIfNeeded(new Runnable() { + @Override + public void run() { + commitSucceeded.set(myPlatformFacade.getVcsHelper(myProject).commitChanges(commit.getChanges(), changeList, commitMessage)); + } + }, ModalityState.NON_MODAL); + return commitSucceeded.get(); } private void notifyError(@NotNull String content, @NotNull GitCommit failedCommit, @NotNull List successfulCommits) {