diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/cherrypick/VcsCherryPickAction.java b/platform/dvcs-impl/src/com/intellij/dvcs/cherrypick/VcsCherryPickAction.java index e0e5b2387b36..57aeedea65dd 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/cherrypick/VcsCherryPickAction.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/cherrypick/VcsCherryPickAction.java @@ -64,6 +64,7 @@ public class VcsCherryPickAction extends DumbAwareAction { final VcsLog log = e.getData(VcsLogDataKeys.VCS_LOG); Project project = e.getProject(); assert project != null; + VcsCherryPickManager cherryPickManager = VcsCherryPickManager.getInstance(project); List cherryPickers = getActiveCherryPickersForProject(project); if (log == null || cherryPickers.isEmpty()) { @@ -72,7 +73,7 @@ public class VcsCherryPickAction extends DumbAwareAction { } List commits = VcsLogUtil.collectFirstPack(log.getSelectedCommits(), VcsLogUtil.MAX_SELECTED_COMMITS); - if (commits.isEmpty()) { + if (commits.isEmpty() || cherryPickManager.isCherryPickAlreadyStartedFor(commits)) { e.getPresentation().setEnabled(false); return; } diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/cherrypick/VcsCherryPickManager.java b/platform/dvcs-impl/src/com/intellij/dvcs/cherrypick/VcsCherryPickManager.java index 7c7a8f8109a1..d2c7465ec84a 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/cherrypick/VcsCherryPickManager.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/cherrypick/VcsCherryPickManager.java @@ -60,6 +60,15 @@ public class VcsCherryPickManager { }, null); } + public boolean isCherryPickAlreadyStartedFor(@NotNull List commits) { + for (CommitId commit : commits) { + if (myIdsInProgress.contains(commit)) { + return true; + } + } + return false; + } + @Nullable private VcsCherryPicker getCherryPickerForCommit(@NotNull VcsFullCommitDetails commitDetails) { AbstractVcs vcs = myProjectLevelVcsManager.getVcsFor(commitDetails.getRoot()); @@ -91,14 +100,17 @@ public class VcsCherryPickManager { } public boolean processDetails(@NotNull VcsFullCommitDetails details) { - myIdsInProgress.add(new CommitId(details.getId(), details.getRoot())); + CommitId commitId = new CommitId(details.getId(), details.getRoot()); + if (myIdsInProgress.contains(commitId)) { + showError("Cherry pick process is already started for commit " + commitId.getHash().toShortString() + " from root " + commitId.getRoot().getName()); + return false; + } + myIdsInProgress.add(commitId); VcsCherryPicker cherryPicker = getCherryPickerForCommit(details); if (cherryPicker == null) { - String message = - "Cherry pick is not supported for commit " + details.getId().toShortString() + " from root " + details.getRoot().getName(); - VcsNotifier.getInstance(myProject).notifyWeakError(message); - LOG.warn(message); + showError( + "Cherry pick is not supported for commit " + details.getId().toShortString() + " from root " + details.getRoot().getName()); return false; } List list = myGroupedCommits.get(cherryPicker); @@ -109,6 +121,11 @@ public class VcsCherryPickManager { return true; } + public void showError(@NotNull String message) { + VcsNotifier.getInstance(myProject).notifyWeakError(message); + LOG.warn(message); + } + @Override public void run(@NotNull ProgressIndicator indicator) { try {