diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java index 4b0867aa4c50..805324ce6169 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java @@ -669,6 +669,12 @@ public class AbstractVcsHelperImpl extends AbstractVcsHelper { final CommittedChangeList[] list = new CommittedChangeList[1]; final FilePath[] targetPath = new FilePath[1]; final VcsException[] exc = new VcsException[1]; + + final BackgroundableActionLock lock = BackgroundableActionLock.getLock(project, VcsBackgroundableActions.COMMITTED_CHANGES_DETAILS, + revision, virtualFile.getPath()); + if (lock.isLocked()) return; + lock.lock(); + Task.Backgroundable task = new Task.Backgroundable(project, title, true, BackgroundFromStartOption.getInstance()) { @Override public void run(@NotNull ProgressIndicator indicator) { @@ -700,8 +706,14 @@ public class AbstractVcsHelperImpl extends AbstractVcsHelper { } } + @Override + public void onCancel() { + lock.unlock(); + } + @Override public void onSuccess() { + lock.unlock(); if (exc[0] != null) { showError(exc[0], failedText(virtualFile, revision)); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsBackgroundableActions.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsBackgroundableActions.java index 1cf6f773a4de..b1fffe010b9c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsBackgroundableActions.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsBackgroundableActions.java @@ -22,7 +22,8 @@ public enum VcsBackgroundableActions { ANNOTATE, COMPARE_WITH, // common for compare with (selected/latest/same) revision CREATE_HISTORY_SESSION, - HISTORY_FOR_SELECTION; + HISTORY_FOR_SELECTION, + COMMITTED_CHANGES_DETAILS; public static Object keyFrom(final FilePath filePath) { return filePath.getPath();