summaryrefslogtreecommitdiff
path: root/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java')
-rw-r--r--plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java55
1 files changed, 29 insertions, 26 deletions
diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java
index e5018f3319d5..f4f3ee98f549 100644
--- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java
+++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnVcs.java
@@ -32,6 +32,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.Trinity;
+import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.vcs.*;
import com.intellij.openapi.vcs.annotate.AnnotationProvider;
import com.intellij.openapi.vcs.changes.*;
@@ -63,10 +64,7 @@ import org.jetbrains.idea.svn.actions.CleanupWorker;
import org.jetbrains.idea.svn.actions.ShowPropertiesDiffWithLocalAction;
import org.jetbrains.idea.svn.actions.SvnMergeProvider;
import org.jetbrains.idea.svn.annotate.SvnAnnotationProvider;
-import org.jetbrains.idea.svn.api.ClientFactory;
-import org.jetbrains.idea.svn.api.CmdClientFactory;
-import org.jetbrains.idea.svn.api.Depth;
-import org.jetbrains.idea.svn.api.SvnKitClientFactory;
+import org.jetbrains.idea.svn.api.*;
import org.jetbrains.idea.svn.auth.SvnAuthenticationNotifier;
import org.jetbrains.idea.svn.branchConfig.SvnLoadedBranchesStorage;
import org.jetbrains.idea.svn.checkin.SvnCheckinEnvironment;
@@ -264,13 +262,7 @@ public class SvnVcs extends AbstractVcs<CommittedChangeList> {
}
public boolean checkCommandLineVersion() {
- boolean isValid = true;
-
- if (!isProject16() && (myConfiguration.isCommandLine() || isProject18OrGreater())) {
- isValid = myChecker.checkExecutableAndNotifyIfNeeded();
- }
-
- return isValid;
+ return getFactory() != cmdClientFactory || myChecker.checkExecutableAndNotifyIfNeeded();
}
public void invokeRefreshSvnRoots() {
@@ -922,13 +914,9 @@ public class SvnVcs extends AbstractVcs<CommittedChangeList> {
@Override
public boolean isVcsBackgroundOperationsAllowed(@NotNull VirtualFile root) {
- // TODO: Currently myAuthNotifier.isAuthenticatedFor directly uses SVNKit to check credentials - so assume for now that background
- // TODO: operations are always allowed for command line. As sometimes this leads to errors - for instance, incoming changes are not
- // TODO: displayed in "Incoming" tab - incoming changes are collected using command line but not displayed because
- // TODO: SvnVcs.isVcsBackgroundOperationsAllowed is false.
ClientFactory factory = getFactory(VfsUtilCore.virtualToIoFile(root));
- return factory == cmdClientFactory || ThreeState.YES.equals(myAuthNotifier.isAuthenticatedFor(root));
+ return ThreeState.YES.equals(myAuthNotifier.isAuthenticatedFor(root, factory == cmdClientFactory ? factory : null));
}
public SvnBranchPointsCalculator getSvnBranchPointsCalculator() {
@@ -953,14 +941,6 @@ public class SvnVcs extends AbstractVcs<CommittedChangeList> {
return svnKitManager;
}
- public boolean isProject18OrGreater() {
- return getProjectRootFormat().isOrGreater(WorkingCopyFormat.ONE_DOT_EIGHT);
- }
-
- public boolean isProject16() {
- return WorkingCopyFormat.ONE_DOT_SIX.equals(getProjectRootFormat());
- }
-
@NotNull
private WorkingCopyFormat getProjectRootFormat() {
return !getProject().isDefault() ? getWorkingCopyFormat(new File(getProject().getBaseDir().getPath())) : WorkingCopyFormat.UNKNOWN;
@@ -1000,12 +980,13 @@ public class SvnVcs extends AbstractVcs<CommittedChangeList> {
@NotNull
private ClientFactory getFactory(@NotNull WorkingCopyFormat format, boolean useProjectRootForUnknown) {
boolean is18OrGreater = format.isOrGreater(WorkingCopyFormat.ONE_DOT_EIGHT);
- boolean is16 = WorkingCopyFormat.ONE_DOT_SIX.equals(format);
boolean isUnknown = WorkingCopyFormat.UNKNOWN.equals(format);
return is18OrGreater
? cmdClientFactory
- : (is16 ? svnKitClientFactory : (useProjectRootForUnknown && isUnknown ? getFactory() : getFactoryFromSettings()));
+ : (!isUnknown && !isSupportedByCommandLine(format)
+ ? svnKitClientFactory
+ : (useProjectRootForUnknown && isUnknown ? getFactory() : getFactoryFromSettings()));
}
@NotNull
@@ -1037,4 +1018,26 @@ public class SvnVcs extends AbstractVcs<CommittedChangeList> {
public ClientFactory getSvnKitFactory() {
return svnKitClientFactory;
}
+
+ @NotNull
+ public WorkingCopyFormat getLowestSupportedFormatForCommandLine() {
+ WorkingCopyFormat result;
+
+ try {
+ result = WorkingCopyFormat.from(CmdVersionClient.parseVersion(Registry.stringValue("svn.lowest.supported.format.for.command.line")));
+ }
+ catch (SvnBindException ignore) {
+ result = WorkingCopyFormat.ONE_DOT_SEVEN;
+ }
+
+ return result;
+ }
+
+ public boolean isSupportedByCommandLine(@NotNull WorkingCopyFormat format) {
+ return format.isOrGreater(getLowestSupportedFormatForCommandLine());
+ }
+
+ public boolean is16SupportedByCommandLine() {
+ return isSupportedByCommandLine(WorkingCopyFormat.ONE_DOT_SIX);
+ }
}