From dd71fb4c3b46a35dcf3f8a0ff7a239d87fd4afb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 5 Mar 2019 14:20:31 +0100 Subject: [PATCH] Expose ScmCommandProtocol as extension point This is necessary so that multiple providers (git, hg, ...) can implement this. The using class has to find the matching implementation. --- ...mSshProtocol.java => ScmCommandProtocol.java} | 7 ++++++- ...tSshProtocol.java => GitCommandProtocol.java} | 16 ++++++++++++---- .../protocolcommand/git/GitProtocolModule.java | 2 -- 3 files changed, 18 insertions(+), 7 deletions(-) rename scm-core/src/main/java/sonia/scm/protocolcommand/{ScmSshProtocol.java => ScmCommandProtocol.java} (51%) rename scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/{GitSshProtocol.java => GitCommandProtocol.java} (82%) diff --git a/scm-core/src/main/java/sonia/scm/protocolcommand/ScmSshProtocol.java b/scm-core/src/main/java/sonia/scm/protocolcommand/ScmCommandProtocol.java similarity index 51% rename from scm-core/src/main/java/sonia/scm/protocolcommand/ScmSshProtocol.java rename to scm-core/src/main/java/sonia/scm/protocolcommand/ScmCommandProtocol.java index 0a016c3806..8def99c057 100644 --- a/scm-core/src/main/java/sonia/scm/protocolcommand/ScmSshProtocol.java +++ b/scm-core/src/main/java/sonia/scm/protocolcommand/ScmCommandProtocol.java @@ -1,8 +1,13 @@ package sonia.scm.protocolcommand; +import sonia.scm.plugin.ExtensionPoint; + import java.io.IOException; -public interface ScmSshProtocol { +@ExtensionPoint +public interface ScmCommandProtocol { + + boolean canHandle(RepositoryContext repositoryContext); void handle(CommandContext context, RepositoryContext repositoryContext) throws IOException; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitSshProtocol.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandProtocol.java similarity index 82% rename from scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitSshProtocol.java rename to scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandProtocol.java index df4ae99553..02e75c2015 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitSshProtocol.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandProtocol.java @@ -10,27 +10,35 @@ import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException; import org.eclipse.jgit.util.FS; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.plugin.Extension; import sonia.scm.protocolcommand.CommandContext; import sonia.scm.protocolcommand.RepositoryContext; -import sonia.scm.protocolcommand.ScmSshProtocol; +import sonia.scm.protocolcommand.ScmCommandProtocol; +import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.RepositoryPermissions; import javax.inject.Inject; import java.io.IOException; -public class GitSshProtocol implements ScmSshProtocol { +@Extension +public class GitCommandProtocol implements ScmCommandProtocol { - private static final Logger LOG = LoggerFactory.getLogger(GitSshProtocol.class); + private static final Logger LOG = LoggerFactory.getLogger(GitCommandProtocol.class); private SshUploadPackFactory uploadPackFactory; private SshReceivePackFactory receivePackFactory; @Inject - public GitSshProtocol(SshUploadPackFactory uploadPackFactory, SshReceivePackFactory receivePackFactory) { + public GitCommandProtocol(SshUploadPackFactory uploadPackFactory, SshReceivePackFactory receivePackFactory) { this.uploadPackFactory = uploadPackFactory; this.receivePackFactory = receivePackFactory; } + @Override + public boolean canHandle(RepositoryContext repositoryContext) { + return GitRepositoryHandler.TYPE_NAME.equals(repositoryContext.getRepository().getType()); + } + @Override public void handle(CommandContext commandContext, RepositoryContext repositoryContext) throws IOException { String subCommand = commandContext.getArgs()[0]; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitProtocolModule.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitProtocolModule.java index 897f71ad4b..8301852408 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitProtocolModule.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitProtocolModule.java @@ -3,13 +3,11 @@ package sonia.scm.protocolcommand.git; import com.google.inject.servlet.ServletModule; import sonia.scm.plugin.Extension; import sonia.scm.protocolcommand.RepositoryContextResolver; -import sonia.scm.protocolcommand.ScmSshProtocol; @Extension public class GitProtocolModule extends ServletModule { @Override protected void configureServlets() { bind(RepositoryContextResolver.class).to(GitRepositoryContextResolver.class); - bind(ScmSshProtocol.class).to(GitSshProtocol.class); } }