diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SshTransport.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SshTransport.java index 16d57fa9c..6f17ebf09 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SshTransport.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SshTransport.java @@ -50,6 +50,7 @@ package org.eclipse.jgit.transport; import org.eclipse.jgit.errors.TransportException; import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.util.FS; /** * The base class for transports that use SSH protocol. This class allows @@ -80,6 +81,18 @@ public abstract class SshTransport extends TcpTransport { sch = SshSessionFactory.getInstance(); } + /** + * Create a new transport instance without a local repository. + * + * @param uri the URI used to access the remote repository. This must be the + * URI passed to {@link #open(URIish)}. + * @since 3.5 + */ + protected SshTransport(URIish uri) { + super(uri); + sch = SshSessionFactory.getInstance(); + } + /** * Set SSH session factory instead of the default one for this instance of * the transport. @@ -118,8 +131,10 @@ public abstract class SshTransport extends TcpTransport { final int tms = getTimeout() > 0 ? getTimeout() * 1000 : 0; + final FS fs = local == null ? FS.detect() : local.getFS(); + sock = sch - .getSession(uri, getCredentialsProvider(), local.getFS(), tms); + .getSession(uri, getCredentialsProvider(), fs, tms); return sock; } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TcpTransport.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TcpTransport.java index a6e539089..fcf026cc6 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TcpTransport.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TcpTransport.java @@ -66,4 +66,15 @@ public abstract class TcpTransport extends Transport { protected TcpTransport(Repository local, URIish uri) { super(local, uri); } + + /** + * Create a new transport instance without a local repository. + * + * @param uri the URI used to access the remote repository. This must be the + * URI passed to {@link #open(URIish)}. + * @since 3.5 + */ + protected TcpTransport(URIish uri) { + super(uri); + } } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitAnon.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitAnon.java index 4fca19ce8..a7f42fd87 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitAnon.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitAnon.java @@ -100,12 +100,21 @@ class TransportGitAnon extends TcpTransport implements PackTransport { throws NotSupportedException { return new TransportGitAnon(local, uri); } + + @Override + public Transport open(URIish uri) throws NotSupportedException, TransportException { + return new TransportGitAnon(uri); + } }; TransportGitAnon(final Repository local, final URIish uri) { super(local, uri); } + TransportGitAnon(final URIish uri) { + super(uri); + } + @Override public FetchConnection openFetch() throws TransportException { return new TcpFetchConnection(); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitSsh.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitSsh.java index dde4d2058..b27fa0d6b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitSsh.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportGitSsh.java @@ -126,10 +126,24 @@ public class TransportGitSsh extends SshTransport implements PackTransport { throws NotSupportedException { return new TransportGitSsh(local, uri); } + + @Override + public Transport open(URIish uri) throws NotSupportedException, TransportException { + return new TransportGitSsh(uri); + } }; TransportGitSsh(final Repository local, final URIish uri) { super(local, uri); + initSshSessionFactory(); + } + + TransportGitSsh(final URIish uri) { + super(uri); + initSshSessionFactory(); + } + + private void initSshSessionFactory() { if (useExtSession()) { setSshSessionFactory(new SshSessionFactory() { @Override