package com.asolutions.scmsshd.commands.git;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
import org.apache.sshd.server.CommandFactory.ExitCallback;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.spearce.jgit.lib.Repository;
import org.spearce.jgit.transport.UploadPack;
import com.asolutions.scmsshd.authorizors.AuthorizationLevel;
import com.asolutions.scmsshd.commands.FilteredCommand;
import com.asolutions.scmsshd.commands.factories.GitSCMCommandFactory;
public class GitUploadPackSCMCommandHandler extends GitSCMCommandImpl {
protected final Logger log = LoggerFactory.getLogger(getClass());
private GitSCMRepositoryProvider repositoryProvider;
private GitUploadPackProvider uploadPackProvider;
public GitUploadPackSCMCommandHandler() {
this(new GitSCMRepositoryProvider(),
new GitUploadPackProvider());
}
public GitUploadPackSCMCommandHandler(
GitSCMRepositoryProvider repositoryProvider,
GitUploadPackProvider uploadPackProvider) {
this.repositoryProvider = repositoryProvider;
this.uploadPackProvider = uploadPackProvider;
}
@Override
protected void runCommand(FilteredCommand filteredCommand,
InputStream inputStream, OutputStream outputStream,
OutputStream errorStream, ExitCallback exitCallback,
Properties config, AuthorizationLevel authorizationLevel)
throws IOException {
log.info("Starting Upload Pack Of: " + filteredCommand.getArgument());
String strRepoBase = config.getProperty(GitSCMCommandFactory.REPOSITORY_BASE);
File repoBase = new File(strRepoBase);
Repository repo = repositoryProvider.provide(repoBase, filteredCommand.getArgument());
UploadPack uploadPack = uploadPackProvider.provide(repo);
uploadPack.upload(inputStream, outputStream, errorStream);
log.info("Completing Upload Pack: " + filteredCommand.getArgument());
}
}