VCS: fix deadlock on startup -> do not set VCS mappings directly from whenProjectInitialized()

This commit is contained in:
irengrig
2011-02-02 09:41:07 +03:00
parent ba9c43ddc4
commit 3819161621
@@ -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();
}
}
}
}
});
}
});
}