From f888e9005eb1b5f81d36f4133300ffbee2c17999 Mon Sep 17 00:00:00 2001 From: Dmitriy Smirnov Date: Wed, 28 Feb 2018 01:01:53 +0300 Subject: [PATCH] Allow using Built-in SSH with non-default port on git >= 2.16 Git tries to auto-detect ssh executable type to use correct command line. It detects Built-in SSH as simple, which does not support specifying port. Git 2.16 started to error out when port is specified in the URL and simple ssh is used. See https://public-inbox.org/git/20171120213101.yquv2ywyjajjtr5x@aiede.mtv.corp.google.com/ Git can be configured to treat builtin SSH as a regular ssh client with GIT_SSH_VARIANT environment variable set to ssh Fixes IDEA-185221 --- .../rt/src/org/jetbrains/git4idea/ssh/GitSSHHandler.java | 4 ++++ .../git4idea/commands/GitHandlerAuthenticationManager.java | 1 + 2 files changed, 5 insertions(+) diff --git a/plugins/git4idea/rt/src/org/jetbrains/git4idea/ssh/GitSSHHandler.java b/plugins/git4idea/rt/src/org/jetbrains/git4idea/ssh/GitSSHHandler.java index 0feebcbb0cf8..edf82dbaf2a3 100644 --- a/plugins/git4idea/rt/src/org/jetbrains/git4idea/ssh/GitSSHHandler.java +++ b/plugins/git4idea/rt/src/org/jetbrains/git4idea/ssh/GitSSHHandler.java @@ -38,6 +38,10 @@ public interface GitSSHHandler { * Name of environment variable for SSH executable */ @NonNls String GIT_SSH_ENV = "GIT_SSH"; + /** + * Name of environment variable for SSH executable variant + */ + @NonNls String GIT_SSH_VAR = "GIT_SSH_VARIANT"; /** * Name of the handler */ diff --git a/plugins/git4idea/src/git4idea/commands/GitHandlerAuthenticationManager.java b/plugins/git4idea/src/git4idea/commands/GitHandlerAuthenticationManager.java index 497a033626e0..44745e87612d 100644 --- a/plugins/git4idea/src/git4idea/commands/GitHandlerAuthenticationManager.java +++ b/plugins/git4idea/src/git4idea/commands/GitHandlerAuthenticationManager.java @@ -110,6 +110,7 @@ class GitHandlerAuthenticationManager implements AutoCloseable { private void prepareSshAuth() throws IOException { GitXmlRpcSshService ssh = ServiceManager.getService(GitXmlRpcSshService.class); myHandler.addCustomEnvironmentVariable(GitSSHHandler.GIT_SSH_ENV, ssh.getScriptPath().getPath()); + myHandler.addCustomEnvironmentVariable(GitSSHHandler.GIT_SSH_VAR, "ssh"); mySshHandler = ssh.registerHandler(new GitSSHGUIHandler(myProject, myHandler.isIgnoreAuthenticationRequest()), myProject); myHandler.addCustomEnvironmentVariable(GitSSHHandler.SSH_HANDLER_ENV, mySshHandler.toString()); int port = ssh.getXmlRcpPort();