]> source.dussan.org Git - jgit.git/commitdiff
Use ServiceLoader to define the default SSH session factory. 82/155782/3
authorEmmanuel Hugonnet <ehugonne@redhat.com>
Mon, 13 Jan 2020 14:45:55 +0000 (15:45 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Sat, 25 Jan 2020 14:58:47 +0000 (15:58 +0100)
Use ServiceLoader and define
org.eclipse.jgit.transport.DefaultSshSessionFactory in
META-INF/services/org.eclipse.jgit.transport.SshSessionFactory so that
the legacy behavior is still the same.

Bug: 553625
Change-Id: Id1a65506140d921ed76d83699e3817f0d2ca08ed
Signed-off-by: Emmanuel Hugonnet <ehugonne@redhat.com>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
org.eclipse.jgit/resources/META-INF/services/org.eclipse.jgit.transport.SshSessionFactory [new file with mode: 0644]
org.eclipse.jgit/src/org/eclipse/jgit/transport/DefaultSshSessionFactory.java
org.eclipse.jgit/src/org/eclipse/jgit/transport/SshSessionFactory.java

diff --git a/org.eclipse.jgit/resources/META-INF/services/org.eclipse.jgit.transport.SshSessionFactory b/org.eclipse.jgit/resources/META-INF/services/org.eclipse.jgit.transport.SshSessionFactory
new file mode 100644 (file)
index 0000000..1f88284
--- /dev/null
@@ -0,0 +1 @@
+org.eclipse.jgit.transport.DefaultSshSessionFactory
index 063fb6b8bd1ee272a57a0cc3ef2a60c40891a667..afa0a11c24a0223c56d150b20607869e227ef504 100644 (file)
@@ -24,8 +24,10 @@ import com.jcraft.jsch.Session;
  * <p>
  * If user interactivity is required by SSH (e.g. to obtain a password), the
  * connection will immediately fail.
+ *
+ * @since 5.7
  */
-class DefaultSshSessionFactory extends JschConfigSessionFactory {
+public class DefaultSshSessionFactory extends JschConfigSessionFactory {
        /** {@inheritDoc} */
        @Override
        protected void configure(OpenSshConfig.Host hc, Session session) {
index 906c4ed2d81ae6749687631eb92f52fe98b62545..ad04d424d7e962d65650fad7ea6dd8010cc6b382 100644 (file)
@@ -13,6 +13,8 @@ package org.eclipse.jgit.transport;
 
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.Iterator;
+import java.util.ServiceLoader;
 
 import org.eclipse.jgit.errors.TransportException;
 import org.eclipse.jgit.lib.Constants;
@@ -31,8 +33,16 @@ import org.eclipse.jgit.util.SystemReader;
  * SshSessionFactory for the duration of the period they are using the Session.
  */
 public abstract class SshSessionFactory {
-       private static SshSessionFactory INSTANCE = new DefaultSshSessionFactory();
+       private static SshSessionFactory INSTANCE = loadSshSessionFactory();
 
+       private static SshSessionFactory loadSshSessionFactory() {
+               ServiceLoader<SshSessionFactory> loader = ServiceLoader.load(SshSessionFactory.class);
+               Iterator<SshSessionFactory> iter = loader.iterator();
+               if(iter.hasNext()) {
+                       return iter.next();
+               }
+               return null;
+       }
        /**
         * Get the currently configured JVM-wide factory.
         * <p>