mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-12-21 15:59:48 +01:00
introduces GitChangesetConverterFactory
This change introduces a GitChangesetConverterFactory to allow injections for the GitChangesetConverter.
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package org.eclipse.jgit.transport;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -29,200 +29,106 @@ package org.eclipse.jgit.transport;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
import org.eclipse.jgit.errors.NoRemoteRepositoryException;
|
||||
import org.eclipse.jgit.errors.NotSupportedException;
|
||||
import org.eclipse.jgit.errors.TransportException;
|
||||
import org.eclipse.jgit.internal.JGitText;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.lib.RepositoryCache;
|
||||
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.repository.spi.HookEventFacade;
|
||||
import sonia.scm.web.CollectingPackParserListener;
|
||||
import sonia.scm.web.GitReceiveHook;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
*/
|
||||
public class ScmTransportProtocol extends TransportProtocol
|
||||
{
|
||||
public class ScmTransportProtocol extends TransportProtocol {
|
||||
|
||||
/** Field description */
|
||||
public static final String NAME = "scm";
|
||||
|
||||
/** Field description */
|
||||
private static final Set<String> SCHEMES = ImmutableSet.of(NAME);
|
||||
|
||||
//~--- constructors ---------------------------------------------------------
|
||||
private Provider<GitChangesetConverterFactory> converterFactory;
|
||||
private Provider<HookEventFacade> hookEventFacadeProvider;
|
||||
private Provider<GitRepositoryHandler> repositoryHandlerProvider;
|
||||
|
||||
/**
|
||||
* Constructs ...
|
||||
*
|
||||
*/
|
||||
public ScmTransportProtocol() {}
|
||||
public ScmTransportProtocol() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs ...
|
||||
*
|
||||
*
|
||||
*
|
||||
* @param hookEventFacadeProvider
|
||||
*
|
||||
* @param repositoryHandlerProvider
|
||||
*/
|
||||
@Inject
|
||||
public ScmTransportProtocol(
|
||||
Provider<GitChangesetConverterFactory> converterFactory,
|
||||
Provider<HookEventFacade> hookEventFacadeProvider,
|
||||
Provider<GitRepositoryHandler> repositoryHandlerProvider)
|
||||
{
|
||||
Provider<GitRepositoryHandler> repositoryHandlerProvider) {
|
||||
this.converterFactory = converterFactory;
|
||||
this.hookEventFacadeProvider = hookEventFacadeProvider;
|
||||
this.repositoryHandlerProvider = repositoryHandlerProvider;
|
||||
}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param uri
|
||||
* @param local
|
||||
* @param remoteName
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean canHandle(URIish uri, Repository local, String remoteName)
|
||||
{
|
||||
if ((uri.getPath() == null) || (uri.getPort() > 0)
|
||||
|| (uri.getUser() != null) || (uri.getPass() != null)
|
||||
|| (uri.getHost() != null)
|
||||
|| ((uri.getScheme() != null) &&!getSchemes().contains(uri.getScheme())))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
public boolean canHandle(URIish uri, Repository local, String remoteName) {
|
||||
return (uri.getPath() != null) && (uri.getPort() <= 0)
|
||||
&& (uri.getUser() == null) && (uri.getPass() == null)
|
||||
&& (uri.getHost() == null)
|
||||
&& ((uri.getScheme() == null) || getSchemes().contains(uri.getScheme()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param uri
|
||||
* @param local
|
||||
* @param remoteName
|
||||
*
|
||||
* @return
|
||||
*
|
||||
* @throws NotSupportedException
|
||||
* @throws TransportException
|
||||
*/
|
||||
@Override
|
||||
public Transport open(URIish uri, Repository local, String remoteName)
|
||||
throws TransportException
|
||||
{
|
||||
public Transport open(URIish uri, Repository local, String remoteName) throws TransportException {
|
||||
File localDirectory = local.getDirectory();
|
||||
File path = local.getFS().resolve(localDirectory, uri.getPath());
|
||||
File gitDir = RepositoryCache.FileKey.resolve(path, local.getFS());
|
||||
|
||||
if (gitDir == null)
|
||||
{
|
||||
if (gitDir == null) {
|
||||
throw new NoRemoteRepositoryException(uri, JGitText.get().notFound);
|
||||
}
|
||||
|
||||
//J-
|
||||
return new TransportLocalWithHooks(
|
||||
converterFactory.get(),
|
||||
hookEventFacadeProvider.get(),
|
||||
repositoryHandlerProvider.get(),
|
||||
local, uri, gitDir
|
||||
);
|
||||
//J+
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String getName()
|
||||
{
|
||||
public String getName() {
|
||||
return NAME;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Set<String> getSchemes()
|
||||
{
|
||||
public Set<String> getSchemes() {
|
||||
return SCHEMES;
|
||||
}
|
||||
|
||||
//~--- inner classes --------------------------------------------------------
|
||||
private static class TransportLocalWithHooks extends TransportLocal {
|
||||
|
||||
/**
|
||||
* Class description
|
||||
*
|
||||
*
|
||||
* @version Enter version here..., 13/05/19
|
||||
* @author Enter your name here...
|
||||
*/
|
||||
private static class TransportLocalWithHooks extends TransportLocal
|
||||
{
|
||||
private final GitChangesetConverterFactory converterFactory;
|
||||
private final GitRepositoryHandler handler;
|
||||
private final HookEventFacade hookEventFacade;
|
||||
|
||||
/**
|
||||
* Constructs ...
|
||||
*
|
||||
*
|
||||
*
|
||||
* @param hookEventFacade
|
||||
* @param handler
|
||||
* @param local
|
||||
* @param uri
|
||||
* @param gitDir
|
||||
*/
|
||||
public TransportLocalWithHooks(HookEventFacade hookEventFacade,
|
||||
GitRepositoryHandler handler, Repository local, URIish uri, File gitDir)
|
||||
{
|
||||
public TransportLocalWithHooks(
|
||||
GitChangesetConverterFactory converterFactory,
|
||||
HookEventFacade hookEventFacade,
|
||||
GitRepositoryHandler handler,
|
||||
Repository local, URIish uri, File gitDir) {
|
||||
super(local, uri, gitDir);
|
||||
this.converterFactory = converterFactory;
|
||||
this.hookEventFacade = hookEventFacade;
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
//~--- methods ------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param dst
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
ReceivePack createReceivePack(Repository dst)
|
||||
{
|
||||
ReceivePack createReceivePack(Repository dst) {
|
||||
ReceivePack pack = new ReceivePack(dst);
|
||||
|
||||
if ((hookEventFacade != null) && (handler != null))
|
||||
{
|
||||
GitReceiveHook hook = new GitReceiveHook(hookEventFacade, handler);
|
||||
if ((hookEventFacade != null) && (handler != null) && (converterFactory != null)) {
|
||||
GitReceiveHook hook = new GitReceiveHook(converterFactory, hookEventFacade, handler);
|
||||
|
||||
pack.setPreReceiveHook(hook);
|
||||
pack.setPostReceiveHook(hook);
|
||||
@@ -232,22 +138,6 @@ public class ScmTransportProtocol extends TransportProtocol
|
||||
|
||||
return pack;
|
||||
}
|
||||
|
||||
//~--- fields -------------------------------------------------------------
|
||||
|
||||
/** Field description */
|
||||
private GitRepositoryHandler handler;
|
||||
|
||||
/** Field description */
|
||||
private HookEventFacade hookEventFacade;
|
||||
}
|
||||
|
||||
|
||||
//~--- fields ---------------------------------------------------------------
|
||||
|
||||
/** Field description */
|
||||
private Provider<HookEventFacade> hookEventFacadeProvider;
|
||||
|
||||
/** Field description */
|
||||
private Provider<GitRepositoryHandler> repositoryHandlerProvider;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.protocolcommand.git;
|
||||
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
@@ -29,6 +29,7 @@ import org.eclipse.jgit.transport.ReceivePack;
|
||||
import org.eclipse.jgit.transport.resolver.ReceivePackFactory;
|
||||
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
|
||||
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.repository.spi.HookEventFacade;
|
||||
import sonia.scm.web.CollectingPackParserListener;
|
||||
@@ -39,9 +40,9 @@ public abstract class BaseReceivePackFactory<T> implements ReceivePackFactory<T>
|
||||
private final GitRepositoryHandler handler;
|
||||
private final GitReceiveHook hook;
|
||||
|
||||
protected BaseReceivePackFactory(GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
||||
protected BaseReceivePackFactory(GitChangesetConverterFactory converterFactory, GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
||||
this.handler = handler;
|
||||
this.hook = new GitReceiveHook(hookEventFacade, handler);
|
||||
this.hook = new GitReceiveHook(converterFactory, hookEventFacade, handler);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -21,21 +21,22 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.protocolcommand.git;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.transport.ReceivePack;
|
||||
import sonia.scm.protocolcommand.RepositoryContext;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.repository.spi.HookEventFacade;
|
||||
|
||||
public class ScmReceivePackFactory extends BaseReceivePackFactory<RepositoryContext> {
|
||||
|
||||
@Inject
|
||||
public ScmReceivePackFactory(GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
||||
super(handler, hookEventFacade);
|
||||
public ScmReceivePackFactory(GitChangesetConverterFactory converterFactory, GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
||||
super(converterFactory, handler, hookEventFacade);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -67,7 +67,7 @@ public class GitChangesetConverter implements Closeable
|
||||
*
|
||||
* @param repository
|
||||
*/
|
||||
public GitChangesetConverter(org.eclipse.jgit.lib.Repository repository)
|
||||
GitChangesetConverter(org.eclipse.jgit.lib.Repository repository)
|
||||
{
|
||||
this(repository, null);
|
||||
}
|
||||
@@ -79,7 +79,7 @@ public class GitChangesetConverter implements Closeable
|
||||
* @param repository
|
||||
* @param revWalk
|
||||
*/
|
||||
public GitChangesetConverter(org.eclipse.jgit.lib.Repository repository,
|
||||
GitChangesetConverter(org.eclipse.jgit.lib.Repository repository,
|
||||
RevWalk revWalk)
|
||||
{
|
||||
this.repository = repository;
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2020-present Cloudogu GmbH and Contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package sonia.scm.repository;
|
||||
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
|
||||
public class GitChangesetConverterFactory {
|
||||
|
||||
public GitChangesetConverter create(Repository repository) {
|
||||
return new GitChangesetConverter(repository);
|
||||
}
|
||||
|
||||
public GitChangesetConverter create(Repository repository, RevWalk revWalk) {
|
||||
return new GitChangesetConverter(repository, revWalk);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.repository;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -72,9 +72,10 @@ public class GitHookChangesetCollector
|
||||
* @param rpack
|
||||
* @param receiveCommands
|
||||
*/
|
||||
public GitHookChangesetCollector(ReceivePack rpack,
|
||||
public GitHookChangesetCollector(GitChangesetConverterFactory converterFactory, ReceivePack rpack,
|
||||
List<ReceiveCommand> receiveCommands)
|
||||
{
|
||||
this.converterFactory = converterFactory;
|
||||
this.rpack = rpack;
|
||||
this.receiveCommands = receiveCommands;
|
||||
this.listener = CollectingPackParserListener.get(rpack);
|
||||
@@ -100,14 +101,14 @@ public class GitHookChangesetCollector
|
||||
try
|
||||
{
|
||||
walk = rpack.getRevWalk();
|
||||
converter = new GitChangesetConverter(repository, walk);
|
||||
converter = converterFactory.create(repository, walk);
|
||||
|
||||
for (ReceiveCommand rc : receiveCommands)
|
||||
{
|
||||
String ref = rc.getRefName();
|
||||
|
||||
|
||||
logger.trace("handle receive command, type={}, ref={}, result={}", rc.getType(), ref, rc.getResult());
|
||||
|
||||
|
||||
if (rc.getType() == ReceiveCommand.Type.DELETE)
|
||||
{
|
||||
logger.debug("skip delete of ref {}", ref);
|
||||
@@ -130,7 +131,7 @@ public class GitHookChangesetCollector
|
||||
builder.append(rc.getType()).append(", ref=");
|
||||
builder.append(rc.getRefName()).append(", result=");
|
||||
builder.append(rc.getResult());
|
||||
|
||||
|
||||
logger.error(builder.toString(), ex);
|
||||
}
|
||||
}
|
||||
@@ -222,5 +223,6 @@ public class GitHookChangesetCollector
|
||||
|
||||
private final List<ReceiveCommand> receiveCommands;
|
||||
|
||||
private final GitChangesetConverterFactory converterFactory;
|
||||
private final ReceivePack rpack;
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ import org.eclipse.jgit.revwalk.RevWalk;
|
||||
import sonia.scm.repository.Changeset;
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
import sonia.scm.repository.GitChangesetConverter;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.repository.GitUtil;
|
||||
import sonia.scm.repository.InternalRepositoryException;
|
||||
@@ -58,18 +59,10 @@ public abstract class AbstractGitIncomingOutgoingCommand
|
||||
/** Field description */
|
||||
private static final String REMOTE_REF_PREFIX = "refs/remote/scm/%s/";
|
||||
|
||||
//~--- constructors ---------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Constructs ...
|
||||
*
|
||||
* @param handler
|
||||
* @param context
|
||||
*/
|
||||
AbstractGitIncomingOutgoingCommand(GitRepositoryHandler handler, GitContext context)
|
||||
{
|
||||
AbstractGitIncomingOutgoingCommand(GitContext context, GitRepositoryHandler handler, GitChangesetConverterFactory converterFactory) {
|
||||
super(context);
|
||||
this.handler = handler;
|
||||
this.converterFactory = converterFactory;
|
||||
}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
@@ -132,7 +125,7 @@ public abstract class AbstractGitIncomingOutgoingCommand
|
||||
try
|
||||
{
|
||||
walk = new RevWalk(git.getRepository());
|
||||
converter = new GitChangesetConverter(git.getRepository(), walk);
|
||||
converter = converterFactory.create(git.getRepository(), walk);
|
||||
|
||||
org.eclipse.jgit.api.LogCommand log = git.log();
|
||||
|
||||
@@ -203,4 +196,5 @@ public abstract class AbstractGitIncomingOutgoingCommand
|
||||
|
||||
/** Field description */
|
||||
private GitRepositoryHandler handler;
|
||||
private final GitChangesetConverterFactory converterFactory;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.repository.spi;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -29,6 +29,7 @@ package sonia.scm.repository.spi;
|
||||
import org.eclipse.jgit.transport.ReceiveCommand;
|
||||
import org.eclipse.jgit.transport.ReceivePack;
|
||||
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitHookChangesetCollector;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
@@ -39,56 +40,27 @@ import java.util.List;
|
||||
*
|
||||
* @author Sebastian Sdorra
|
||||
*/
|
||||
public class GitHookChangesetProvider implements HookChangesetProvider
|
||||
{
|
||||
public class GitHookChangesetProvider implements HookChangesetProvider {
|
||||
|
||||
/**
|
||||
* Constructs ...
|
||||
*
|
||||
*
|
||||
* @param receivePack
|
||||
* @param receiveCommands
|
||||
*/
|
||||
public GitHookChangesetProvider(ReceivePack receivePack,
|
||||
List<ReceiveCommand> receiveCommands)
|
||||
{
|
||||
private final GitChangesetConverterFactory converterFactory;
|
||||
private final ReceivePack receivePack;
|
||||
private final List<ReceiveCommand> receiveCommands;
|
||||
|
||||
private HookChangesetResponse response;
|
||||
|
||||
public GitHookChangesetProvider(GitChangesetConverterFactory converterFactory, ReceivePack receivePack,
|
||||
List<ReceiveCommand> receiveCommands) {
|
||||
this.converterFactory = converterFactory;
|
||||
this.receivePack = receivePack;
|
||||
this.receiveCommands = receiveCommands;
|
||||
}
|
||||
|
||||
//~--- methods --------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @param request
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public synchronized HookChangesetResponse handleRequest(
|
||||
HookChangesetRequest request)
|
||||
{
|
||||
if (response == null)
|
||||
{
|
||||
GitHookChangesetCollector collector =
|
||||
new GitHookChangesetCollector(receivePack, receiveCommands);
|
||||
|
||||
public synchronized HookChangesetResponse handleRequest(HookChangesetRequest request) {
|
||||
if (response == null) {
|
||||
GitHookChangesetCollector collector = new GitHookChangesetCollector(converterFactory, receivePack, receiveCommands);
|
||||
response = new HookChangesetResponse(collector.collectChangesets());
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
//~--- fields ---------------------------------------------------------------
|
||||
|
||||
/** Field description */
|
||||
private List<ReceiveCommand> receiveCommands;
|
||||
|
||||
/** Field description */
|
||||
private ReceivePack receivePack;
|
||||
|
||||
/** Field description */
|
||||
private HookChangesetResponse response;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.repository.spi;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -29,6 +29,7 @@ package sonia.scm.repository.spi;
|
||||
import org.eclipse.jgit.transport.ReceiveCommand;
|
||||
import org.eclipse.jgit.transport.ReceivePack;
|
||||
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.api.GitHookBranchProvider;
|
||||
import sonia.scm.repository.api.GitHookMessageProvider;
|
||||
import sonia.scm.repository.api.HookBranchProvider;
|
||||
@@ -63,12 +64,12 @@ public class GitHookContextProvider extends HookContextProvider
|
||||
* @param receivePack git receive pack
|
||||
* @param receiveCommands received commands
|
||||
*/
|
||||
public GitHookContextProvider(ReceivePack receivePack,
|
||||
List<ReceiveCommand> receiveCommands)
|
||||
public GitHookContextProvider(GitChangesetConverterFactory converterFactory, ReceivePack receivePack,
|
||||
List<ReceiveCommand> receiveCommands)
|
||||
{
|
||||
this.receivePack = receivePack;
|
||||
this.receiveCommands = receiveCommands;
|
||||
this.changesetProvider = new GitHookChangesetProvider(receivePack,
|
||||
this.changesetProvider = new GitHookChangesetProvider(converterFactory, receivePack,
|
||||
receiveCommands);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ package sonia.scm.repository.spi;
|
||||
import org.eclipse.jgit.api.LogCommand;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -41,19 +42,11 @@ import java.io.IOException;
|
||||
* @author Sebastian Sdorra
|
||||
*/
|
||||
public class GitIncomingCommand extends AbstractGitIncomingOutgoingCommand
|
||||
implements IncomingCommand
|
||||
{
|
||||
implements IncomingCommand {
|
||||
|
||||
/**
|
||||
* Constructs ...
|
||||
*
|
||||
* @param handler
|
||||
* @param context
|
||||
*/
|
||||
@Inject
|
||||
GitIncomingCommand(GitRepositoryHandler handler, GitContext context)
|
||||
{
|
||||
super(handler, context);
|
||||
GitIncomingCommand(GitContext context, GitRepositoryHandler handler, GitChangesetConverterFactory converterFactory) {
|
||||
super(context, handler, converterFactory);
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
@@ -43,6 +43,7 @@ import sonia.scm.NotFoundException;
|
||||
import sonia.scm.repository.Changeset;
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
import sonia.scm.repository.GitChangesetConverter;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitUtil;
|
||||
import sonia.scm.repository.InternalRepositoryException;
|
||||
import sonia.scm.util.IOUtil;
|
||||
@@ -71,6 +72,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
||||
private static final Logger logger =
|
||||
LoggerFactory.getLogger(GitLogCommand.class);
|
||||
public static final String REVISION = "Revision";
|
||||
private final GitChangesetConverterFactory converterFactory;
|
||||
|
||||
//~--- constructors ---------------------------------------------------------
|
||||
|
||||
@@ -82,9 +84,10 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
||||
*
|
||||
*/
|
||||
@Inject
|
||||
GitLogCommand(GitContext context)
|
||||
GitLogCommand(GitContext context, GitChangesetConverterFactory converterFactory)
|
||||
{
|
||||
super(context);
|
||||
this.converterFactory = converterFactory;
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
@@ -122,7 +125,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
||||
|
||||
if (commit != null)
|
||||
{
|
||||
converter = new GitChangesetConverter(gr, revWalk);
|
||||
converter = converterFactory.create(gr, revWalk);
|
||||
|
||||
if (isBranchRequested(request)) {
|
||||
String branch = request.getBranch();
|
||||
@@ -233,7 +236,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
||||
|
||||
revWalk = new RevWalk(repository);
|
||||
|
||||
converter = new GitChangesetConverter(repository, revWalk);
|
||||
converter = converterFactory.create(repository, revWalk);
|
||||
|
||||
if (!Strings.isNullOrEmpty(request.getPath())) {
|
||||
revWalk.setTreeFilter(
|
||||
|
||||
@@ -29,6 +29,7 @@ package sonia.scm.repository.spi;
|
||||
import org.eclipse.jgit.api.LogCommand;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -41,19 +42,12 @@ import java.io.IOException;
|
||||
* @author Sebastian Sdorra
|
||||
*/
|
||||
public class GitOutgoingCommand extends AbstractGitIncomingOutgoingCommand
|
||||
implements OutgoingCommand
|
||||
{
|
||||
implements OutgoingCommand {
|
||||
|
||||
/**
|
||||
* Constructs ...
|
||||
*
|
||||
* @param handler
|
||||
* @param context
|
||||
*/
|
||||
@Inject
|
||||
GitOutgoingCommand(GitRepositoryHandler handler, GitContext context)
|
||||
GitOutgoingCommand(GitContext context, GitRepositoryHandler handler, GitChangesetConverterFactory converterFactory)
|
||||
{
|
||||
super(handler, context);
|
||||
super(context, handler, converterFactory);
|
||||
}
|
||||
|
||||
//~--- get methods ----------------------------------------------------------
|
||||
|
||||
@@ -117,7 +117,7 @@ public class GitRepositoryServiceProvider extends RepositoryServiceProvider
|
||||
|
||||
@Override
|
||||
public LogCommand getLogCommand() {
|
||||
return new GitLogCommand(context);
|
||||
return commandInjector.getInstance(GitLogCommand.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.web;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -34,6 +34,7 @@ import org.eclipse.jgit.transport.ReceiveCommand;
|
||||
import org.eclipse.jgit.transport.ReceivePack;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.repository.RepositoryHookType;
|
||||
import sonia.scm.repository.spi.GitHookContextProvider;
|
||||
@@ -66,9 +67,10 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
|
||||
* @param hookEventFacade
|
||||
* @param handler
|
||||
*/
|
||||
public GitReceiveHook(HookEventFacade hookEventFacade,
|
||||
GitRepositoryHandler handler)
|
||||
public GitReceiveHook(GitChangesetConverterFactory converterFactory, HookEventFacade hookEventFacade,
|
||||
GitRepositoryHandler handler)
|
||||
{
|
||||
this.converterFactory = converterFactory;
|
||||
this.hookEventFacade = hookEventFacade;
|
||||
this.handler = handler;
|
||||
}
|
||||
@@ -122,7 +124,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
|
||||
|
||||
logger.trace("resolved repository to {}", repositoryId);
|
||||
|
||||
GitHookContextProvider context = new GitHookContextProvider(rpack,
|
||||
GitHookContextProvider context = new GitHookContextProvider(converterFactory, rpack,
|
||||
receiveCommands);
|
||||
|
||||
hookEventFacade.handle(repositoryId).fireHookEvent(type, context);
|
||||
@@ -188,6 +190,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
|
||||
/** Field description */
|
||||
private GitRepositoryHandler handler;
|
||||
|
||||
private final GitChangesetConverterFactory converterFactory;
|
||||
/** Field description */
|
||||
private HookEventFacade hookEventFacade;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.web;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -34,6 +34,7 @@ import org.eclipse.jgit.transport.resolver.ReceivePackFactory;
|
||||
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
|
||||
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
||||
import sonia.scm.protocolcommand.git.BaseReceivePackFactory;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.repository.spi.HookEventFacade;
|
||||
|
||||
@@ -53,8 +54,8 @@ public class GitReceivePackFactory extends BaseReceivePackFactory<HttpServletReq
|
||||
private ReceivePackFactory<HttpServletRequest> wrapped;
|
||||
|
||||
@Inject
|
||||
public GitReceivePackFactory(GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
||||
super(handler, hookEventFacade);
|
||||
public GitReceivePackFactory(GitChangesetConverterFactory converterFactory, GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
||||
super(converterFactory, handler, hookEventFacade);
|
||||
this.wrapped = new DefaultReceivePackFactory();
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.protocolcommand.git;
|
||||
|
||||
import org.eclipse.jgit.api.Git;
|
||||
@@ -38,6 +38,7 @@ import org.junit.rules.TemporaryFolder;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitConfig;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.web.CollectingPackParserListener;
|
||||
@@ -82,7 +83,7 @@ public class BaseReceivePackFactoryTest {
|
||||
ReceivePack receivePack = new ReceivePack(repository);
|
||||
when(wrappedReceivePackFactory.create(request, repository)).thenReturn(receivePack);
|
||||
|
||||
factory = new BaseReceivePackFactory<Object>(handler, null) {
|
||||
factory = new BaseReceivePackFactory<Object>(new GitChangesetConverterFactory(), handler, null) {
|
||||
@Override
|
||||
protected ReceivePack createBasicReceivePack(Object request, Repository repository) throws ServiceNotEnabledException, ServiceNotAuthorizedException {
|
||||
return wrappedReceivePackFactory.create(request, repository);
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.repository.client.spi;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -32,6 +32,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
||||
|
||||
import sonia.scm.repository.Changeset;
|
||||
import sonia.scm.repository.GitChangesetConverter;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.client.api.RepositoryClientException;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
@@ -71,7 +72,8 @@ public class GitCommitCommand implements CommitCommand
|
||||
@Override
|
||||
public Changeset commit(CommitRequest request) throws IOException
|
||||
{
|
||||
try (GitChangesetConverter converter = new GitChangesetConverter(git.getRepository()))
|
||||
GitChangesetConverterFactory converterFactory = new GitChangesetConverterFactory();
|
||||
try (GitChangesetConverter converter = converterFactory.create(git.getRepository()))
|
||||
{
|
||||
RevCommit commit = git.commit()
|
||||
.setAuthor(request.getAuthor().getName(), request.getAuthor().getMail())
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.repository.spi;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -40,6 +40,7 @@ import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
import sonia.scm.repository.Changeset;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.repository.Repository;
|
||||
import sonia.scm.user.User;
|
||||
@@ -110,23 +111,7 @@ public class AbstractRemoteCommandTestBase
|
||||
{
|
||||
|
||||
// store reference to handle weak references
|
||||
proto = new ScmTransportProtocol(new Provider<HookEventFacade>()
|
||||
{
|
||||
|
||||
@Override
|
||||
public HookEventFacade get()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}, new Provider<GitRepositoryHandler>()
|
||||
{
|
||||
|
||||
@Override
|
||||
public GitRepositoryHandler get()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
});
|
||||
proto = new ScmTransportProtocol(GitChangesetConverterFactory::new, () -> null, () -> null);
|
||||
Transport.register(proto);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,12 +21,13 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.repository.spi;
|
||||
|
||||
import org.eclipse.jgit.transport.ScmTransportProtocol;
|
||||
import org.eclipse.jgit.transport.Transport;
|
||||
import org.junit.rules.ExternalResource;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.repository.PreProcessorUtil;
|
||||
import sonia.scm.repository.RepositoryManager;
|
||||
@@ -47,7 +48,7 @@ public class BindTransportProtocolRule extends ExternalResource {
|
||||
RepositoryManager repositoryManager = mock(RepositoryManager.class);
|
||||
HookEventFacade hookEventFacade = new HookEventFacade(of(repositoryManager), hookContextFactory);
|
||||
GitRepositoryHandler gitRepositoryHandler = mock(GitRepositoryHandler.class);
|
||||
scmTransportProtocol = new ScmTransportProtocol(of(hookEventFacade), of(gitRepositoryHandler));
|
||||
scmTransportProtocol = new ScmTransportProtocol(of(new GitChangesetConverterFactory()), of(hookEventFacade), of(gitRepositoryHandler));
|
||||
|
||||
Transport.register(scmTransportProtocol);
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider;
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.store.InMemoryConfigurationStoreFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -173,14 +174,11 @@ public class GitIncomingCommandTest
|
||||
assertEquals(0, cpr.getTotal());
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private GitIncomingCommand createCommand()
|
||||
{
|
||||
return new GitIncomingCommand(handler, new GitContext(incomingDirectory, incomingRepository, new GitRepositoryConfigStoreProvider(new InMemoryConfigurationStoreFactory())));
|
||||
private GitIncomingCommand createCommand() {
|
||||
return new GitIncomingCommand(
|
||||
new GitContext(incomingDirectory, incomingRepository, new GitRepositoryConfigStoreProvider(new InMemoryConfigurationStoreFactory())),
|
||||
handler,
|
||||
new GitChangesetConverterFactory()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ package sonia.scm.repository.spi;
|
||||
import org.junit.Test;
|
||||
import sonia.scm.NotFoundException;
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
@@ -108,8 +109,7 @@ public class GitLogCommandAncestorTest extends AbstractGitCommandTestBase
|
||||
createCommand().getChangesets(request);
|
||||
}
|
||||
|
||||
private GitLogCommand createCommand()
|
||||
{
|
||||
return new GitLogCommand(createContext());
|
||||
private GitLogCommand createCommand() {
|
||||
return new GitLogCommand(createContext(), new GitChangesetConverterFactory());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import sonia.scm.repository.Changeset;
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryConfig;
|
||||
import sonia.scm.repository.Modifications;
|
||||
import sonia.scm.repository.Person;
|
||||
@@ -293,8 +294,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
|
||||
return new File(repositoryDirectory, "HEAD");
|
||||
}
|
||||
|
||||
private GitLogCommand createCommand()
|
||||
{
|
||||
return new GitLogCommand(createContext());
|
||||
private GitLogCommand createCommand() {
|
||||
return new GitLogCommand(createContext(), new GitChangesetConverterFactory());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
||||
import org.junit.Test;
|
||||
import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider;
|
||||
import sonia.scm.repository.ChangesetPagingResult;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.store.InMemoryConfigurationStoreFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -151,6 +152,10 @@ public class GitOutgoingCommandTest extends AbstractRemoteCommandTestBase
|
||||
*/
|
||||
private GitOutgoingCommand createCommand()
|
||||
{
|
||||
return new GitOutgoingCommand(handler, new GitContext(outgoingDirectory, outgoingRepository, new GitRepositoryConfigStoreProvider(new InMemoryConfigurationStoreFactory())));
|
||||
return new GitOutgoingCommand(
|
||||
new GitContext(outgoingDirectory, outgoingRepository, new GitRepositoryConfigStoreProvider(new InMemoryConfigurationStoreFactory())),
|
||||
handler,
|
||||
new GitChangesetConverterFactory()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||
import sonia.scm.repository.GitRepositoryHandler;
|
||||
import sonia.scm.repository.PreProcessorUtil;
|
||||
import sonia.scm.repository.RepositoryManager;
|
||||
@@ -65,7 +66,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
|
||||
HookContextFactory hookContextFactory = new HookContextFactory(mock(PreProcessorUtil.class));
|
||||
HookEventFacade hookEventFacade = new HookEventFacade(of(mock(RepositoryManager.class)), hookContextFactory);
|
||||
GitRepositoryHandler gitRepositoryHandler = mock(GitRepositoryHandler.class);
|
||||
proto = new ScmTransportProtocol(of(hookEventFacade), of(gitRepositoryHandler));
|
||||
proto = new ScmTransportProtocol(of(new GitChangesetConverterFactory()), of(hookEventFacade), of(gitRepositoryHandler));
|
||||
Transport.register(proto);
|
||||
workdirProvider = new WorkdirProvider(temporaryFolder.newFolder());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user