IDEA-59757 Version Control: autodetect VCS root doesn't delete corresponding none mapping (PyCharm). (for IDEA as well)

This commit is contained in:
irengrig
2010-12-23 16:21:43 +03:00
parent 36d9cec97e
commit 9193df7c1d
6 changed files with 53 additions and 13 deletions
@@ -34,6 +34,7 @@ import com.intellij.openapi.vcs.ex.ProjectLevelVcsManagerEx;
import com.intellij.openapi.vcs.impl.projectlevelman.NewMappings;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -52,15 +53,18 @@ public class ModuleDefaultVcsRootPolicy extends DefaultVcsRootPolicy {
myModuleManager = ModuleManager.getInstance(myProject);
}
public void addDefaultVcsRoots(final NewMappings mappingList, final AbstractVcs vcs, final List<VirtualFile> result) {
public void addDefaultVcsRoots(final NewMappings mappingList, @NotNull final String vcsName, final List<VirtualFile> result) {
final ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(myProject);
if (myBaseDir != null && vcs.getName().equals(mappingList.getVcsFor(myBaseDir)) && (vcs.equals(vcsManager.getVcsFor(myBaseDir)))) {
result.add(myBaseDir);
if (myBaseDir != null && vcsName.equals(mappingList.getVcsFor(myBaseDir))) {
final AbstractVcs vcsFor = vcsManager.getVcsFor(myBaseDir);
if (vcsFor != null && vcsName.equals(vcsFor.getName())) {
result.add(myBaseDir);
}
}
final StorageScheme storageScheme = ((ProjectEx) myProject).getStateStore().getStorageScheme();
if (StorageScheme.DIRECTORY_BASED.equals(storageScheme) && (myBaseDir != null)) {
final VirtualFile ideaDir = myBaseDir.findChild(Project.DIRECTORY_STORE_FOLDER);
if (ideaDir != null && ideaDir.isValid() && ideaDir.isDirectory() && vcs.equals(vcsManager.getVcsFor(ideaDir))) {
if (ideaDir != null && ideaDir.isValid() && ideaDir.isDirectory() && vcsName.equals(vcsManager.getVcsFor(ideaDir))) {
result.add(ideaDir);
}
}
@@ -77,7 +81,7 @@ public class ModuleDefaultVcsRootPolicy extends DefaultVcsRootPolicy {
// explicitly (we know it anyway)
VcsDirectoryMapping mapping = mappingList.getMappingFor(file, module);
final String mappingVcs = mapping != null ? mapping.getVcs() : null;
if (vcs.getName().equals(mappingVcs)) {
if (vcsName.equals(mappingVcs)) {
result.add(file);
}
}
@@ -19,12 +19,13 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.openapi.vcs.FilePathImpl;
import com.intellij.openapi.vcs.changes.DirtBuilder;
import com.intellij.openapi.vcs.changes.VcsGuess;
import com.intellij.openapi.vcs.changes.FilePathUnderVcs;
import com.intellij.openapi.vcs.changes.VcsGuess;
import com.intellij.openapi.vcs.impl.projectlevelman.NewMappings;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.platform.ProjectBaseDirectory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -41,9 +42,9 @@ public class BasicDefaultVcsRootPolicy extends DefaultVcsRootPolicy {
myBaseDir = project.getBaseDir();
}
public void addDefaultVcsRoots(final NewMappings mappingList, final AbstractVcs vcs, final List<VirtualFile> result) {
public void addDefaultVcsRoots(final NewMappings mappingList, @NotNull final String vcsName, final List<VirtualFile> result) {
final VirtualFile baseDir = ProjectBaseDirectory.getInstance(myProject).getBaseDir(myBaseDir);
if (baseDir != null && vcs.getName().equals(mappingList.getVcsFor(baseDir))) {
if (baseDir != null && vcsName.equals(mappingList.getVcsFor(baseDir))) {
result.add(baseDir);
}
}
@@ -17,11 +17,11 @@ package com.intellij.openapi.vcs.impl;
import com.intellij.lifecycle.PeriodicalTasksCloser;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.AbstractVcs;
import com.intellij.openapi.vcs.changes.DirtBuilder;
import com.intellij.openapi.vcs.changes.VcsGuess;
import com.intellij.openapi.vcs.impl.projectlevelman.NewMappings;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -34,7 +34,7 @@ public abstract class DefaultVcsRootPolicy {
return PeriodicalTasksCloser.getInstance().safeGetService(project, DefaultVcsRootPolicy.class);
}
public abstract void addDefaultVcsRoots(final NewMappings mappingList, AbstractVcs vcs, List<VirtualFile> result);
public abstract void addDefaultVcsRoots(final NewMappings mappingList, @NotNull String vcsName, List<VirtualFile> result);
public abstract boolean matchesDefaultMapping(final VirtualFile file, final Object matchContext);
@@ -59,6 +59,8 @@ import com.intellij.util.containers.Convertor;
import com.intellij.util.messages.MessageBus;
import com.intellij.util.messages.MessageBusConnection;
import com.intellij.util.ui.EditorAdapter;
import org.jdom.Attribute;
import org.jdom.DataConversionException;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -71,7 +73,8 @@ import java.util.List;
public class ProjectLevelVcsManagerImpl extends ProjectLevelVcsManagerEx implements ProjectComponent, JDOMExternalizable {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.impl.ProjectLevelVcsManagerImpl");
public static final String SETTINGS_EDITED_MANUALLY = "settingsEditedManually";
private final ProjectLevelVcsManagerSerialization mySerialization;
private final OptionsAndConfirmations myOptionsAndConfirmations;
@@ -454,6 +457,10 @@ public void addMessageToConsoleWindow(final String message, final TextAttributes
}
public void setAutoDirectoryMapping(String path, String activeVcsName) {
final List<VirtualFile> defaultRoots = myMappings.getDefaultRoots();
if (defaultRoots.size() == 1 && "".equals(myMappings.haveDefaultMapping())) {
myMappings.removeDirectoryMapping(new VcsDirectoryMapping("", ""));
}
myMappings.setMapping(path, activeVcsName);
}
@@ -472,10 +479,20 @@ public void addMessageToConsoleWindow(final String message, final TextAttributes
public void readExternal(Element element) throws InvalidDataException {
mySerialization.readExternalUtil(element, myOptionsAndConfirmations);
final Attribute attribute = element.getAttribute(SETTINGS_EDITED_MANUALLY);
if (attribute != null) {
try {
myHaveLegacyVcsConfiguration = attribute.getBooleanValue();
}
catch (DataConversionException e) {
//
}
}
}
public void writeExternal(Element element) throws WriteExternalException {
mySerialization.writeExternalUtil(element, myOptionsAndConfirmations);
element.setAttribute(SETTINGS_EDITED_MANUALLY, String.valueOf(myHaveLegacyVcsConfiguration));
}
@NotNull
@@ -32,7 +32,6 @@ import com.intellij.openapi.vcs.impl.VcsInitObject;
import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.EventDispatcher;
import com.intellij.util.containers.Convertor;
import com.intellij.util.messages.MessageBus;
import org.jetbrains.annotations.NotNull;
@@ -268,7 +267,7 @@ public class NewMappings {
for (VcsDirectoryMapping mapping : mappings) {
if (mapping.isDefaultMapping()) {
// todo callback here; don't like it
myDefaultVcsRootPolicy.addDefaultVcsRoots(this, vcs, result);
myDefaultVcsRootPolicy.addDefaultVcsRoots(this, vcsName, result);
} else {
final VirtualFile file = LocalFileSystem.getInstance().findFileByPath(mapping.getDirectory());
if (file != null) {
@@ -586,4 +585,21 @@ public class NewMappings {
private @interface Modification {
}
public List<VirtualFile> getDefaultRoots() {
synchronized (myLock) {
final String defaultVcs = haveDefaultMapping();
if (defaultVcs == null) return Collections.emptyList();
final List<VirtualFile> list = new ArrayList<VirtualFile>();
myDefaultVcsRootPolicy.addDefaultVcsRoots(this, defaultVcs, list);
if (StringUtil.isEmptyOrSpaces(defaultVcs)) {
return AbstractVcs.filterUniqueRootsDefault(list, Convertor.SELF);
} else {
final AbstractVcs vcs = AllVcses.getInstance(myProject).getByName(defaultVcs);
if (vcs == null) {
return AbstractVcs.filterUniqueRootsDefault(list, Convertor.SELF);
}
return vcs.filterUniqueRoots(list, Convertor.SELF);
}
}
}
}
@@ -20,6 +20,7 @@ import com.intellij.openapi.project.DumbAwareRunnable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupManager;
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 org.jetbrains.annotations.NonNls;
@@ -44,6 +45,7 @@ public class PlatformVcsDetector implements ProjectComponent {
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();