From 3819161621a3fabec79c4fa742a9bb6bf6367385 Mon Sep 17 00:00:00 2001 From: irengrig Date: Wed, 2 Feb 2011 09:39:13 +0300 Subject: [PATCH] VCS: fix deadlock on startup -> do not set VCS mappings directly from whenProjectInitialized() --- .../platform/PlatformVcsDetector.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/platform/PlatformVcsDetector.java b/platform/vcs-impl/src/com/intellij/platform/PlatformVcsDetector.java index 9a27b64efc8d..82604dd6c195 100644 --- a/platform/vcs-impl/src/com/intellij/platform/PlatformVcsDetector.java +++ b/platform/vcs-impl/src/com/intellij/platform/PlatformVcsDetector.java @@ -23,6 +23,7 @@ import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.VcsDirectoryMapping; import com.intellij.openapi.vcs.impl.ProjectLevelVcsManagerImpl; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.ui.AppUIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -41,16 +42,21 @@ public class PlatformVcsDetector implements ProjectComponent { public void projectOpened() { StartupManager.getInstance(myProject).runWhenProjectIsInitialized(new DumbAwareRunnable() { public void run() { - VirtualFile file = ProjectBaseDirectory.getInstance(myProject).getBaseDir(myProject.getBaseDir()); - if (myVcsManager.needAutodetectMappings()) { - AbstractVcs vcs = myVcsManager.findVersioningVcs(file); - if (vcs != null && vcs != myVcsManager.getVcsFor(file)) { - myVcsManager.removeDirectoryMapping(new VcsDirectoryMapping("", "")); - myVcsManager.setAutoDirectoryMapping(file.getPath(), vcs.getName()); - myVcsManager.cleanupMappings(); - myVcsManager.updateActiveVcss(); + AppUIUtil.invokeLaterIfProjectAlive(myProject, new DumbAwareRunnable() { + @Override + public void run() { + VirtualFile file = ProjectBaseDirectory.getInstance(myProject).getBaseDir(myProject.getBaseDir()); + if (myVcsManager.needAutodetectMappings()) { + AbstractVcs vcs = myVcsManager.findVersioningVcs(file); + if (vcs != null && vcs != myVcsManager.getVcsFor(file)) { + myVcsManager.removeDirectoryMapping(new VcsDirectoryMapping("", "")); + myVcsManager.setAutoDirectoryMapping(file.getPath(), vcs.getName()); + myVcsManager.cleanupMappings(); + myVcsManager.updateActiveVcss(); + } + } } - } + }); } }); }