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.
This commit is contained in:
René Pfeuffer
2019-03-05 14:20:31 +01:00
parent ebb21ee308
commit dd71fb4c3b
3 changed files with 18 additions and 7 deletions

View File

@@ -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];

View File

@@ -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);
}
}