mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-59757 Version Control: autodetect VCS root doesn't delete corresponding none mapping (PyCharm). (for IDEA as well)
This commit is contained in:
+9
-5
@@ -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);
|
||||
|
||||
|
||||
+18
-1
@@ -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
|
||||
|
||||
+18
-2
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user