diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationNotifier.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationNotifier.java index 1e823136398f..dcdf944f8910 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationNotifier.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnAuthenticationNotifier.java @@ -347,7 +347,7 @@ public class SvnAuthenticationNotifier extends GenericNotifierImpl() { @Override public void consume(String s) { - configuration.setConfigurationDirectory(s); + configuration.setConfigurationDirParameters(false, s); } }, project, null); } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java index 192e4244f461..ecbb0a217f25 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java @@ -277,13 +277,8 @@ public class SvnConfigurable implements Configurable { public void apply() throws ConfigurationException { SvnConfiguration configuration = SvnConfiguration.getInstance(myProject); - final String newConfigurationDirectory = myConfigurationDirectoryText.getText(); - if (! Comparing.equal(configuration.getConfigurationDirectory(), newConfigurationDirectory)) { - configuration.setConfigurationDirectory(newConfigurationDirectory); - } - if (configuration.isUseDefaultConfiguation() != myUseDefaultCheckBox.isSelected()) { - configuration.setUseDefaultConfiguation(myUseDefaultCheckBox.isSelected()); - } + configuration.setConfigurationDirParameters(myUseDefaultCheckBox.isSelected(), myConfigurationDirectoryText.getText()); + configuration.setIsUseDefaultProxy(myUseCommonProxy.isSelected()); final SvnVcs vcs17 = SvnVcs.getInstance(myProject); if ((! configuration.DETECT_NESTED_COPIES) && (configuration.DETECT_NESTED_COPIES != myDetectNestedWorkingCopiesCheckBox.isSelected())) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java index 390f32e1ff63..abb650ffec50 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java @@ -22,10 +22,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.DefaultJDOMExternalizer; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.Ref; -import com.intellij.openapi.util.WriteExternalException; +import com.intellij.openapi.util.*; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vcs.changes.VcsAnnotationRefresher; import org.jdom.Attribute; @@ -206,12 +203,31 @@ public class SvnConfiguration implements PersistentStateComponent { return myIsUseDefaultConfiguration; } - public void setConfigurationDirectory(String path) { + public void setConfigurationDirParameters(final boolean newUseDefault, final String newConfigurationDirectory) { + final String defaultPath = IdeaSubversionConfigurationDirectory.getPath(); + final String oldEffectivePath = isUseDefaultConfiguation() ? defaultPath : getConfigurationDirectory(); + final String newEffectivePath = newUseDefault ? defaultPath : newConfigurationDirectory; + + boolean directoryChanged = !Comparing.equal(getConfigurationDirectory(), newConfigurationDirectory); + if (directoryChanged) { + setConfigurationDirectory(newConfigurationDirectory); + } + boolean usageChanged = isUseDefaultConfiguation() != newUseDefault; + if (usageChanged) { + setUseDefaultConfiguation(newUseDefault); + } + + if (directoryChanged || usageChanged) { + if (! Comparing.equal(oldEffectivePath, newEffectivePath)) { + clear(); + } + } + } + + private void setConfigurationDirectory(String path) { myConfigurationDirectory = path; File dir = path == null ? new File(IdeaSubversionConfigurationDirectory.getPath()) : new File(path); SVNConfigFile.createDefaultConfiguration(dir); - - clear(); } public void clear() { @@ -223,9 +239,8 @@ public class SvnConfiguration implements PersistentStateComponent { RUNTIME_AUTH_CACHE.clear(); } - public void setUseDefaultConfiguation(boolean useDefault) { + private void setUseDefaultConfiguation(boolean useDefault) { myIsUseDefaultConfiguration = useDefault; - clear(); } public ISVNOptions getOptions(Project project) { diff --git a/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnAuthenticationTest.java b/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnAuthenticationTest.java index e9acaf599b51..1305a47a290b 100644 --- a/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnAuthenticationTest.java +++ b/plugins/svn4idea/testSource/org/jetbrains/idea/svn/SvnAuthenticationTest.java @@ -70,7 +70,7 @@ public class SvnAuthenticationTest extends PlatformTestCase { myConfiguration = SvnConfiguration.getInstance(myProject); final String configPath = myProject.getBaseDir().getPath() + File.separator + "Subversion"; - myConfiguration.setConfigurationDirectory(configPath); + myConfiguration.setConfigurationDirParameters(false, configPath); final File configFile = new File(configPath); myFilesToDelete.add(configFile);