From f4943de29b486f7a066b570457722220530523b6 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Thu, 5 Jun 2014 17:54:01 +0400 Subject: [PATCH] Fixed the problem with calling LsRemoteCommand without a local repository over the ssh and git:// protocols. Bug: 436695 Change-Id: Ifd69fbc04156fa4dacdcba6225768f43843eee97 Signed-off-by: Anton Bannykh Signed-off-by: Robin Rosenberg --- .../eclipse/jgit/transport/SshTransport.java | 17 ++++++++++++++++- .../eclipse/jgit/transport/TcpTransport.java | 11 +++++++++++ .../jgit/transport/TransportGitAnon.java | 9 +++++++++ .../eclipse/jgit/transport/TransportGitSsh.java | 14 ++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) 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 @@ 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 @@ protected SshTransport(Repository local, URIish uri) { 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 @@ protected RemoteSession getSession() throws TransportException { 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 @@ public Transport open(URIish uri, Repository local, String remoteName) 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 Transport open(URIish uri, Repository local, String remoteName) 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