mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-14 17:26:22 +01:00
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:
@@ -1,8 +1,13 @@
|
|||||||
package sonia.scm.protocolcommand;
|
package sonia.scm.protocolcommand;
|
||||||
|
|
||||||
|
import sonia.scm.plugin.ExtensionPoint;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public interface ScmSshProtocol {
|
@ExtensionPoint
|
||||||
|
public interface ScmCommandProtocol {
|
||||||
|
|
||||||
|
boolean canHandle(RepositoryContext repositoryContext);
|
||||||
|
|
||||||
void handle(CommandContext context, RepositoryContext repositoryContext) throws IOException;
|
void handle(CommandContext context, RepositoryContext repositoryContext) throws IOException;
|
||||||
|
|
||||||
@@ -10,27 +10,35 @@ import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
|||||||
import org.eclipse.jgit.util.FS;
|
import org.eclipse.jgit.util.FS;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import sonia.scm.plugin.Extension;
|
||||||
import sonia.scm.protocolcommand.CommandContext;
|
import sonia.scm.protocolcommand.CommandContext;
|
||||||
import sonia.scm.protocolcommand.RepositoryContext;
|
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 sonia.scm.repository.RepositoryPermissions;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.io.IOException;
|
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 SshUploadPackFactory uploadPackFactory;
|
||||||
private SshReceivePackFactory receivePackFactory;
|
private SshReceivePackFactory receivePackFactory;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public GitSshProtocol(SshUploadPackFactory uploadPackFactory, SshReceivePackFactory receivePackFactory) {
|
public GitCommandProtocol(SshUploadPackFactory uploadPackFactory, SshReceivePackFactory receivePackFactory) {
|
||||||
this.uploadPackFactory = uploadPackFactory;
|
this.uploadPackFactory = uploadPackFactory;
|
||||||
this.receivePackFactory = receivePackFactory;
|
this.receivePackFactory = receivePackFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canHandle(RepositoryContext repositoryContext) {
|
||||||
|
return GitRepositoryHandler.TYPE_NAME.equals(repositoryContext.getRepository().getType());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(CommandContext commandContext, RepositoryContext repositoryContext) throws IOException {
|
public void handle(CommandContext commandContext, RepositoryContext repositoryContext) throws IOException {
|
||||||
String subCommand = commandContext.getArgs()[0];
|
String subCommand = commandContext.getArgs()[0];
|
||||||
@@ -3,13 +3,11 @@ package sonia.scm.protocolcommand.git;
|
|||||||
import com.google.inject.servlet.ServletModule;
|
import com.google.inject.servlet.ServletModule;
|
||||||
import sonia.scm.plugin.Extension;
|
import sonia.scm.plugin.Extension;
|
||||||
import sonia.scm.protocolcommand.RepositoryContextResolver;
|
import sonia.scm.protocolcommand.RepositoryContextResolver;
|
||||||
import sonia.scm.protocolcommand.ScmSshProtocol;
|
|
||||||
|
|
||||||
@Extension
|
@Extension
|
||||||
public class GitProtocolModule extends ServletModule {
|
public class GitProtocolModule extends ServletModule {
|
||||||
@Override
|
@Override
|
||||||
protected void configureServlets() {
|
protected void configureServlets() {
|
||||||
bind(RepositoryContextResolver.class).to(GitRepositoryContextResolver.class);
|
bind(RepositoryContextResolver.class).to(GitRepositoryContextResolver.class);
|
||||||
bind(ScmSshProtocol.class).to(GitSshProtocol.class);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user