mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-02 03:25:56 +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
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.eclipse.jgit.transport;
|
package org.eclipse.jgit.transport;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
@@ -29,200 +29,106 @@ package org.eclipse.jgit.transport;
|
|||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
|
|
||||||
import org.eclipse.jgit.errors.NoRemoteRepositoryException;
|
import org.eclipse.jgit.errors.NoRemoteRepositoryException;
|
||||||
import org.eclipse.jgit.errors.NotSupportedException;
|
|
||||||
import org.eclipse.jgit.errors.TransportException;
|
import org.eclipse.jgit.errors.TransportException;
|
||||||
import org.eclipse.jgit.internal.JGitText;
|
import org.eclipse.jgit.internal.JGitText;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
import org.eclipse.jgit.lib.RepositoryCache;
|
import org.eclipse.jgit.lib.RepositoryCache;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.repository.spi.HookEventFacade;
|
import sonia.scm.repository.spi.HookEventFacade;
|
||||||
import sonia.scm.web.CollectingPackParserListener;
|
import sonia.scm.web.CollectingPackParserListener;
|
||||||
import sonia.scm.web.GitReceiveHook;
|
import sonia.scm.web.GitReceiveHook;
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* @author Sebastian Sdorra
|
* @author Sebastian Sdorra
|
||||||
*/
|
*/
|
||||||
public class ScmTransportProtocol extends TransportProtocol
|
public class ScmTransportProtocol extends TransportProtocol {
|
||||||
{
|
|
||||||
|
|
||||||
/** Field description */
|
|
||||||
public static final String NAME = "scm";
|
public static final String NAME = "scm";
|
||||||
|
|
||||||
/** Field description */
|
|
||||||
private static final Set<String> SCHEMES = ImmutableSet.of(NAME);
|
private static final Set<String> SCHEMES = ImmutableSet.of(NAME);
|
||||||
|
|
||||||
//~--- constructors ---------------------------------------------------------
|
private Provider<GitChangesetConverterFactory> converterFactory;
|
||||||
|
private Provider<HookEventFacade> hookEventFacadeProvider;
|
||||||
|
private Provider<GitRepositoryHandler> repositoryHandlerProvider;
|
||||||
|
|
||||||
/**
|
public ScmTransportProtocol() {
|
||||||
* Constructs ...
|
}
|
||||||
*
|
|
||||||
*/
|
|
||||||
public ScmTransportProtocol() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs ...
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param hookEventFacadeProvider
|
|
||||||
*
|
|
||||||
* @param repositoryHandlerProvider
|
|
||||||
*/
|
|
||||||
@Inject
|
@Inject
|
||||||
public ScmTransportProtocol(
|
public ScmTransportProtocol(
|
||||||
|
Provider<GitChangesetConverterFactory> converterFactory,
|
||||||
Provider<HookEventFacade> hookEventFacadeProvider,
|
Provider<HookEventFacade> hookEventFacadeProvider,
|
||||||
Provider<GitRepositoryHandler> repositoryHandlerProvider)
|
Provider<GitRepositoryHandler> repositoryHandlerProvider) {
|
||||||
{
|
this.converterFactory = converterFactory;
|
||||||
this.hookEventFacadeProvider = hookEventFacadeProvider;
|
this.hookEventFacadeProvider = hookEventFacadeProvider;
|
||||||
this.repositoryHandlerProvider = repositoryHandlerProvider;
|
this.repositoryHandlerProvider = repositoryHandlerProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- methods --------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method description
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param uri
|
|
||||||
* @param local
|
|
||||||
* @param remoteName
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canHandle(URIish uri, Repository local, String remoteName)
|
public boolean canHandle(URIish uri, Repository local, String remoteName) {
|
||||||
{
|
return (uri.getPath() != null) && (uri.getPort() <= 0)
|
||||||
if ((uri.getPath() == null) || (uri.getPort() > 0)
|
&& (uri.getUser() == null) && (uri.getPass() == null)
|
||||||
|| (uri.getUser() != null) || (uri.getPass() != null)
|
&& (uri.getHost() == null)
|
||||||
|| (uri.getHost() != null)
|
&& ((uri.getScheme() == null) || getSchemes().contains(uri.getScheme()));
|
||||||
|| ((uri.getScheme() != null) &&!getSchemes().contains(uri.getScheme())))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Method description
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param uri
|
|
||||||
* @param local
|
|
||||||
* @param remoteName
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*
|
|
||||||
* @throws NotSupportedException
|
|
||||||
* @throws TransportException
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Transport open(URIish uri, Repository local, String remoteName)
|
public Transport open(URIish uri, Repository local, String remoteName) throws TransportException {
|
||||||
throws TransportException
|
|
||||||
{
|
|
||||||
File localDirectory = local.getDirectory();
|
File localDirectory = local.getDirectory();
|
||||||
File path = local.getFS().resolve(localDirectory, uri.getPath());
|
File path = local.getFS().resolve(localDirectory, uri.getPath());
|
||||||
File gitDir = RepositoryCache.FileKey.resolve(path, local.getFS());
|
File gitDir = RepositoryCache.FileKey.resolve(path, local.getFS());
|
||||||
|
|
||||||
if (gitDir == null)
|
if (gitDir == null) {
|
||||||
{
|
|
||||||
throw new NoRemoteRepositoryException(uri, JGitText.get().notFound);
|
throw new NoRemoteRepositoryException(uri, JGitText.get().notFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
//J-
|
|
||||||
return new TransportLocalWithHooks(
|
return new TransportLocalWithHooks(
|
||||||
|
converterFactory.get(),
|
||||||
hookEventFacadeProvider.get(),
|
hookEventFacadeProvider.get(),
|
||||||
repositoryHandlerProvider.get(),
|
repositoryHandlerProvider.get(),
|
||||||
local, uri, gitDir
|
local, uri, gitDir
|
||||||
);
|
);
|
||||||
//J+
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- get methods ----------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method description
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public String getName()
|
public String getName() {
|
||||||
{
|
|
||||||
return NAME;
|
return NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Method description
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getSchemes()
|
public Set<String> getSchemes() {
|
||||||
{
|
|
||||||
return SCHEMES;
|
return SCHEMES;
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- inner classes --------------------------------------------------------
|
private static class TransportLocalWithHooks extends TransportLocal {
|
||||||
|
|
||||||
/**
|
private final GitChangesetConverterFactory converterFactory;
|
||||||
* Class description
|
private final GitRepositoryHandler handler;
|
||||||
*
|
private final HookEventFacade hookEventFacade;
|
||||||
*
|
|
||||||
* @version Enter version here..., 13/05/19
|
|
||||||
* @author Enter your name here...
|
|
||||||
*/
|
|
||||||
private static class TransportLocalWithHooks extends TransportLocal
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
public TransportLocalWithHooks(
|
||||||
* Constructs ...
|
GitChangesetConverterFactory converterFactory,
|
||||||
*
|
HookEventFacade hookEventFacade,
|
||||||
*
|
GitRepositoryHandler handler,
|
||||||
*
|
Repository local, URIish uri, File gitDir) {
|
||||||
* @param hookEventFacade
|
|
||||||
* @param handler
|
|
||||||
* @param local
|
|
||||||
* @param uri
|
|
||||||
* @param gitDir
|
|
||||||
*/
|
|
||||||
public TransportLocalWithHooks(HookEventFacade hookEventFacade,
|
|
||||||
GitRepositoryHandler handler, Repository local, URIish uri, File gitDir)
|
|
||||||
{
|
|
||||||
super(local, uri, gitDir);
|
super(local, uri, gitDir);
|
||||||
|
this.converterFactory = converterFactory;
|
||||||
this.hookEventFacade = hookEventFacade;
|
this.hookEventFacade = hookEventFacade;
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- methods ------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method description
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param dst
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
ReceivePack createReceivePack(Repository dst)
|
ReceivePack createReceivePack(Repository dst) {
|
||||||
{
|
|
||||||
ReceivePack pack = new ReceivePack(dst);
|
ReceivePack pack = new ReceivePack(dst);
|
||||||
|
|
||||||
if ((hookEventFacade != null) && (handler != null))
|
if ((hookEventFacade != null) && (handler != null) && (converterFactory != null)) {
|
||||||
{
|
GitReceiveHook hook = new GitReceiveHook(converterFactory, hookEventFacade, handler);
|
||||||
GitReceiveHook hook = new GitReceiveHook(hookEventFacade, handler);
|
|
||||||
|
|
||||||
pack.setPreReceiveHook(hook);
|
pack.setPreReceiveHook(hook);
|
||||||
pack.setPostReceiveHook(hook);
|
pack.setPostReceiveHook(hook);
|
||||||
@@ -232,22 +138,6 @@ public class ScmTransportProtocol extends TransportProtocol
|
|||||||
|
|
||||||
return pack;
|
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
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.protocolcommand.git;
|
package sonia.scm.protocolcommand.git;
|
||||||
|
|
||||||
import org.eclipse.jgit.lib.Repository;
|
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.ReceivePackFactory;
|
||||||
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
|
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
|
||||||
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.repository.spi.HookEventFacade;
|
import sonia.scm.repository.spi.HookEventFacade;
|
||||||
import sonia.scm.web.CollectingPackParserListener;
|
import sonia.scm.web.CollectingPackParserListener;
|
||||||
@@ -39,9 +40,9 @@ public abstract class BaseReceivePackFactory<T> implements ReceivePackFactory<T>
|
|||||||
private final GitRepositoryHandler handler;
|
private final GitRepositoryHandler handler;
|
||||||
private final GitReceiveHook hook;
|
private final GitReceiveHook hook;
|
||||||
|
|
||||||
protected BaseReceivePackFactory(GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
protected BaseReceivePackFactory(GitChangesetConverterFactory converterFactory, GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
this.hook = new GitReceiveHook(hookEventFacade, handler);
|
this.hook = new GitReceiveHook(converterFactory, hookEventFacade, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -21,21 +21,22 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.protocolcommand.git;
|
package sonia.scm.protocolcommand.git;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
import org.eclipse.jgit.transport.ReceivePack;
|
import org.eclipse.jgit.transport.ReceivePack;
|
||||||
import sonia.scm.protocolcommand.RepositoryContext;
|
import sonia.scm.protocolcommand.RepositoryContext;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.repository.spi.HookEventFacade;
|
import sonia.scm.repository.spi.HookEventFacade;
|
||||||
|
|
||||||
public class ScmReceivePackFactory extends BaseReceivePackFactory<RepositoryContext> {
|
public class ScmReceivePackFactory extends BaseReceivePackFactory<RepositoryContext> {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ScmReceivePackFactory(GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
public ScmReceivePackFactory(GitChangesetConverterFactory converterFactory, GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
||||||
super(handler, hookEventFacade);
|
super(converterFactory, handler, hookEventFacade);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class GitChangesetConverter implements Closeable
|
|||||||
*
|
*
|
||||||
* @param repository
|
* @param repository
|
||||||
*/
|
*/
|
||||||
public GitChangesetConverter(org.eclipse.jgit.lib.Repository repository)
|
GitChangesetConverter(org.eclipse.jgit.lib.Repository repository)
|
||||||
{
|
{
|
||||||
this(repository, null);
|
this(repository, null);
|
||||||
}
|
}
|
||||||
@@ -79,7 +79,7 @@ public class GitChangesetConverter implements Closeable
|
|||||||
* @param repository
|
* @param repository
|
||||||
* @param revWalk
|
* @param revWalk
|
||||||
*/
|
*/
|
||||||
public GitChangesetConverter(org.eclipse.jgit.lib.Repository repository,
|
GitChangesetConverter(org.eclipse.jgit.lib.Repository repository,
|
||||||
RevWalk revWalk)
|
RevWalk revWalk)
|
||||||
{
|
{
|
||||||
this.repository = repository;
|
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
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.repository;
|
package sonia.scm.repository;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
@@ -72,9 +72,10 @@ public class GitHookChangesetCollector
|
|||||||
* @param rpack
|
* @param rpack
|
||||||
* @param receiveCommands
|
* @param receiveCommands
|
||||||
*/
|
*/
|
||||||
public GitHookChangesetCollector(ReceivePack rpack,
|
public GitHookChangesetCollector(GitChangesetConverterFactory converterFactory, ReceivePack rpack,
|
||||||
List<ReceiveCommand> receiveCommands)
|
List<ReceiveCommand> receiveCommands)
|
||||||
{
|
{
|
||||||
|
this.converterFactory = converterFactory;
|
||||||
this.rpack = rpack;
|
this.rpack = rpack;
|
||||||
this.receiveCommands = receiveCommands;
|
this.receiveCommands = receiveCommands;
|
||||||
this.listener = CollectingPackParserListener.get(rpack);
|
this.listener = CollectingPackParserListener.get(rpack);
|
||||||
@@ -100,14 +101,14 @@ public class GitHookChangesetCollector
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
walk = rpack.getRevWalk();
|
walk = rpack.getRevWalk();
|
||||||
converter = new GitChangesetConverter(repository, walk);
|
converter = converterFactory.create(repository, walk);
|
||||||
|
|
||||||
for (ReceiveCommand rc : receiveCommands)
|
for (ReceiveCommand rc : receiveCommands)
|
||||||
{
|
{
|
||||||
String ref = rc.getRefName();
|
String ref = rc.getRefName();
|
||||||
|
|
||||||
logger.trace("handle receive command, type={}, ref={}, result={}", rc.getType(), ref, rc.getResult());
|
logger.trace("handle receive command, type={}, ref={}, result={}", rc.getType(), ref, rc.getResult());
|
||||||
|
|
||||||
if (rc.getType() == ReceiveCommand.Type.DELETE)
|
if (rc.getType() == ReceiveCommand.Type.DELETE)
|
||||||
{
|
{
|
||||||
logger.debug("skip delete of ref {}", ref);
|
logger.debug("skip delete of ref {}", ref);
|
||||||
@@ -130,7 +131,7 @@ public class GitHookChangesetCollector
|
|||||||
builder.append(rc.getType()).append(", ref=");
|
builder.append(rc.getType()).append(", ref=");
|
||||||
builder.append(rc.getRefName()).append(", result=");
|
builder.append(rc.getRefName()).append(", result=");
|
||||||
builder.append(rc.getResult());
|
builder.append(rc.getResult());
|
||||||
|
|
||||||
logger.error(builder.toString(), ex);
|
logger.error(builder.toString(), ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -222,5 +223,6 @@ public class GitHookChangesetCollector
|
|||||||
|
|
||||||
private final List<ReceiveCommand> receiveCommands;
|
private final List<ReceiveCommand> receiveCommands;
|
||||||
|
|
||||||
|
private final GitChangesetConverterFactory converterFactory;
|
||||||
private final ReceivePack rpack;
|
private final ReceivePack rpack;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import org.eclipse.jgit.revwalk.RevWalk;
|
|||||||
import sonia.scm.repository.Changeset;
|
import sonia.scm.repository.Changeset;
|
||||||
import sonia.scm.repository.ChangesetPagingResult;
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
import sonia.scm.repository.GitChangesetConverter;
|
import sonia.scm.repository.GitChangesetConverter;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.repository.GitUtil;
|
import sonia.scm.repository.GitUtil;
|
||||||
import sonia.scm.repository.InternalRepositoryException;
|
import sonia.scm.repository.InternalRepositoryException;
|
||||||
@@ -58,18 +59,10 @@ public abstract class AbstractGitIncomingOutgoingCommand
|
|||||||
/** Field description */
|
/** Field description */
|
||||||
private static final String REMOTE_REF_PREFIX = "refs/remote/scm/%s/";
|
private static final String REMOTE_REF_PREFIX = "refs/remote/scm/%s/";
|
||||||
|
|
||||||
//~--- constructors ---------------------------------------------------------
|
AbstractGitIncomingOutgoingCommand(GitContext context, GitRepositoryHandler handler, GitChangesetConverterFactory converterFactory) {
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs ...
|
|
||||||
*
|
|
||||||
* @param handler
|
|
||||||
* @param context
|
|
||||||
*/
|
|
||||||
AbstractGitIncomingOutgoingCommand(GitRepositoryHandler handler, GitContext context)
|
|
||||||
{
|
|
||||||
super(context);
|
super(context);
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
|
this.converterFactory = converterFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- methods --------------------------------------------------------------
|
//~--- methods --------------------------------------------------------------
|
||||||
@@ -132,7 +125,7 @@ public abstract class AbstractGitIncomingOutgoingCommand
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
walk = new RevWalk(git.getRepository());
|
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();
|
org.eclipse.jgit.api.LogCommand log = git.log();
|
||||||
|
|
||||||
@@ -203,4 +196,5 @@ public abstract class AbstractGitIncomingOutgoingCommand
|
|||||||
|
|
||||||
/** Field description */
|
/** Field description */
|
||||||
private GitRepositoryHandler handler;
|
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
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.repository.spi;
|
package sonia.scm.repository.spi;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
@@ -29,6 +29,7 @@ package sonia.scm.repository.spi;
|
|||||||
import org.eclipse.jgit.transport.ReceiveCommand;
|
import org.eclipse.jgit.transport.ReceiveCommand;
|
||||||
import org.eclipse.jgit.transport.ReceivePack;
|
import org.eclipse.jgit.transport.ReceivePack;
|
||||||
|
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitHookChangesetCollector;
|
import sonia.scm.repository.GitHookChangesetCollector;
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
@@ -39,56 +40,27 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* @author Sebastian Sdorra
|
* @author Sebastian Sdorra
|
||||||
*/
|
*/
|
||||||
public class GitHookChangesetProvider implements HookChangesetProvider
|
public class GitHookChangesetProvider implements HookChangesetProvider {
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
private final GitChangesetConverterFactory converterFactory;
|
||||||
* Constructs ...
|
private final ReceivePack receivePack;
|
||||||
*
|
private final List<ReceiveCommand> receiveCommands;
|
||||||
*
|
|
||||||
* @param receivePack
|
private HookChangesetResponse response;
|
||||||
* @param receiveCommands
|
|
||||||
*/
|
public GitHookChangesetProvider(GitChangesetConverterFactory converterFactory, ReceivePack receivePack,
|
||||||
public GitHookChangesetProvider(ReceivePack receivePack,
|
List<ReceiveCommand> receiveCommands) {
|
||||||
List<ReceiveCommand> receiveCommands)
|
this.converterFactory = converterFactory;
|
||||||
{
|
|
||||||
this.receivePack = receivePack;
|
this.receivePack = receivePack;
|
||||||
this.receiveCommands = receiveCommands;
|
this.receiveCommands = receiveCommands;
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- methods --------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Method description
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param request
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized HookChangesetResponse handleRequest(
|
public synchronized HookChangesetResponse handleRequest(HookChangesetRequest request) {
|
||||||
HookChangesetRequest request)
|
if (response == null) {
|
||||||
{
|
GitHookChangesetCollector collector = new GitHookChangesetCollector(converterFactory, receivePack, receiveCommands);
|
||||||
if (response == null)
|
|
||||||
{
|
|
||||||
GitHookChangesetCollector collector =
|
|
||||||
new GitHookChangesetCollector(receivePack, receiveCommands);
|
|
||||||
|
|
||||||
response = new HookChangesetResponse(collector.collectChangesets());
|
response = new HookChangesetResponse(collector.collectChangesets());
|
||||||
}
|
}
|
||||||
|
|
||||||
return response;
|
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
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.repository.spi;
|
package sonia.scm.repository.spi;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
@@ -29,6 +29,7 @@ package sonia.scm.repository.spi;
|
|||||||
import org.eclipse.jgit.transport.ReceiveCommand;
|
import org.eclipse.jgit.transport.ReceiveCommand;
|
||||||
import org.eclipse.jgit.transport.ReceivePack;
|
import org.eclipse.jgit.transport.ReceivePack;
|
||||||
|
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.api.GitHookBranchProvider;
|
import sonia.scm.repository.api.GitHookBranchProvider;
|
||||||
import sonia.scm.repository.api.GitHookMessageProvider;
|
import sonia.scm.repository.api.GitHookMessageProvider;
|
||||||
import sonia.scm.repository.api.HookBranchProvider;
|
import sonia.scm.repository.api.HookBranchProvider;
|
||||||
@@ -63,12 +64,12 @@ public class GitHookContextProvider extends HookContextProvider
|
|||||||
* @param receivePack git receive pack
|
* @param receivePack git receive pack
|
||||||
* @param receiveCommands received commands
|
* @param receiveCommands received commands
|
||||||
*/
|
*/
|
||||||
public GitHookContextProvider(ReceivePack receivePack,
|
public GitHookContextProvider(GitChangesetConverterFactory converterFactory, ReceivePack receivePack,
|
||||||
List<ReceiveCommand> receiveCommands)
|
List<ReceiveCommand> receiveCommands)
|
||||||
{
|
{
|
||||||
this.receivePack = receivePack;
|
this.receivePack = receivePack;
|
||||||
this.receiveCommands = receiveCommands;
|
this.receiveCommands = receiveCommands;
|
||||||
this.changesetProvider = new GitHookChangesetProvider(receivePack,
|
this.changesetProvider = new GitHookChangesetProvider(converterFactory, receivePack,
|
||||||
receiveCommands);
|
receiveCommands);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ package sonia.scm.repository.spi;
|
|||||||
import org.eclipse.jgit.api.LogCommand;
|
import org.eclipse.jgit.api.LogCommand;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import sonia.scm.repository.ChangesetPagingResult;
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -41,19 +42,11 @@ import java.io.IOException;
|
|||||||
* @author Sebastian Sdorra
|
* @author Sebastian Sdorra
|
||||||
*/
|
*/
|
||||||
public class GitIncomingCommand extends AbstractGitIncomingOutgoingCommand
|
public class GitIncomingCommand extends AbstractGitIncomingOutgoingCommand
|
||||||
implements IncomingCommand
|
implements IncomingCommand {
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs ...
|
|
||||||
*
|
|
||||||
* @param handler
|
|
||||||
* @param context
|
|
||||||
*/
|
|
||||||
@Inject
|
@Inject
|
||||||
GitIncomingCommand(GitRepositoryHandler handler, GitContext context)
|
GitIncomingCommand(GitContext context, GitRepositoryHandler handler, GitChangesetConverterFactory converterFactory) {
|
||||||
{
|
super(context, handler, converterFactory);
|
||||||
super(handler, context);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- get methods ----------------------------------------------------------
|
//~--- get methods ----------------------------------------------------------
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import sonia.scm.NotFoundException;
|
|||||||
import sonia.scm.repository.Changeset;
|
import sonia.scm.repository.Changeset;
|
||||||
import sonia.scm.repository.ChangesetPagingResult;
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
import sonia.scm.repository.GitChangesetConverter;
|
import sonia.scm.repository.GitChangesetConverter;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitUtil;
|
import sonia.scm.repository.GitUtil;
|
||||||
import sonia.scm.repository.InternalRepositoryException;
|
import sonia.scm.repository.InternalRepositoryException;
|
||||||
import sonia.scm.util.IOUtil;
|
import sonia.scm.util.IOUtil;
|
||||||
@@ -71,6 +72,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
|||||||
private static final Logger logger =
|
private static final Logger logger =
|
||||||
LoggerFactory.getLogger(GitLogCommand.class);
|
LoggerFactory.getLogger(GitLogCommand.class);
|
||||||
public static final String REVISION = "Revision";
|
public static final String REVISION = "Revision";
|
||||||
|
private final GitChangesetConverterFactory converterFactory;
|
||||||
|
|
||||||
//~--- constructors ---------------------------------------------------------
|
//~--- constructors ---------------------------------------------------------
|
||||||
|
|
||||||
@@ -82,9 +84,10 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Inject
|
@Inject
|
||||||
GitLogCommand(GitContext context)
|
GitLogCommand(GitContext context, GitChangesetConverterFactory converterFactory)
|
||||||
{
|
{
|
||||||
super(context);
|
super(context);
|
||||||
|
this.converterFactory = converterFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- get methods ----------------------------------------------------------
|
//~--- get methods ----------------------------------------------------------
|
||||||
@@ -122,7 +125,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
|||||||
|
|
||||||
if (commit != null)
|
if (commit != null)
|
||||||
{
|
{
|
||||||
converter = new GitChangesetConverter(gr, revWalk);
|
converter = converterFactory.create(gr, revWalk);
|
||||||
|
|
||||||
if (isBranchRequested(request)) {
|
if (isBranchRequested(request)) {
|
||||||
String branch = request.getBranch();
|
String branch = request.getBranch();
|
||||||
@@ -233,7 +236,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
|
|||||||
|
|
||||||
revWalk = new RevWalk(repository);
|
revWalk = new RevWalk(repository);
|
||||||
|
|
||||||
converter = new GitChangesetConverter(repository, revWalk);
|
converter = converterFactory.create(repository, revWalk);
|
||||||
|
|
||||||
if (!Strings.isNullOrEmpty(request.getPath())) {
|
if (!Strings.isNullOrEmpty(request.getPath())) {
|
||||||
revWalk.setTreeFilter(
|
revWalk.setTreeFilter(
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ package sonia.scm.repository.spi;
|
|||||||
import org.eclipse.jgit.api.LogCommand;
|
import org.eclipse.jgit.api.LogCommand;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import sonia.scm.repository.ChangesetPagingResult;
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
@@ -41,19 +42,12 @@ import java.io.IOException;
|
|||||||
* @author Sebastian Sdorra
|
* @author Sebastian Sdorra
|
||||||
*/
|
*/
|
||||||
public class GitOutgoingCommand extends AbstractGitIncomingOutgoingCommand
|
public class GitOutgoingCommand extends AbstractGitIncomingOutgoingCommand
|
||||||
implements OutgoingCommand
|
implements OutgoingCommand {
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructs ...
|
|
||||||
*
|
|
||||||
* @param handler
|
|
||||||
* @param context
|
|
||||||
*/
|
|
||||||
@Inject
|
@Inject
|
||||||
GitOutgoingCommand(GitRepositoryHandler handler, GitContext context)
|
GitOutgoingCommand(GitContext context, GitRepositoryHandler handler, GitChangesetConverterFactory converterFactory)
|
||||||
{
|
{
|
||||||
super(handler, context);
|
super(context, handler, converterFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
//~--- get methods ----------------------------------------------------------
|
//~--- get methods ----------------------------------------------------------
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ public class GitRepositoryServiceProvider extends RepositoryServiceProvider
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LogCommand getLogCommand() {
|
public LogCommand getLogCommand() {
|
||||||
return new GitLogCommand(context);
|
return commandInjector.getInstance(GitLogCommand.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.web;
|
package sonia.scm.web;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
@@ -34,6 +34,7 @@ import org.eclipse.jgit.transport.ReceiveCommand;
|
|||||||
import org.eclipse.jgit.transport.ReceivePack;
|
import org.eclipse.jgit.transport.ReceivePack;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.repository.RepositoryHookType;
|
import sonia.scm.repository.RepositoryHookType;
|
||||||
import sonia.scm.repository.spi.GitHookContextProvider;
|
import sonia.scm.repository.spi.GitHookContextProvider;
|
||||||
@@ -66,9 +67,10 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
|
|||||||
* @param hookEventFacade
|
* @param hookEventFacade
|
||||||
* @param handler
|
* @param handler
|
||||||
*/
|
*/
|
||||||
public GitReceiveHook(HookEventFacade hookEventFacade,
|
public GitReceiveHook(GitChangesetConverterFactory converterFactory, HookEventFacade hookEventFacade,
|
||||||
GitRepositoryHandler handler)
|
GitRepositoryHandler handler)
|
||||||
{
|
{
|
||||||
|
this.converterFactory = converterFactory;
|
||||||
this.hookEventFacade = hookEventFacade;
|
this.hookEventFacade = hookEventFacade;
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
}
|
}
|
||||||
@@ -122,7 +124,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
|
|||||||
|
|
||||||
logger.trace("resolved repository to {}", repositoryId);
|
logger.trace("resolved repository to {}", repositoryId);
|
||||||
|
|
||||||
GitHookContextProvider context = new GitHookContextProvider(rpack,
|
GitHookContextProvider context = new GitHookContextProvider(converterFactory, rpack,
|
||||||
receiveCommands);
|
receiveCommands);
|
||||||
|
|
||||||
hookEventFacade.handle(repositoryId).fireHookEvent(type, context);
|
hookEventFacade.handle(repositoryId).fireHookEvent(type, context);
|
||||||
@@ -188,6 +190,7 @@ public class GitReceiveHook implements PreReceiveHook, PostReceiveHook
|
|||||||
/** Field description */
|
/** Field description */
|
||||||
private GitRepositoryHandler handler;
|
private GitRepositoryHandler handler;
|
||||||
|
|
||||||
|
private final GitChangesetConverterFactory converterFactory;
|
||||||
/** Field description */
|
/** Field description */
|
||||||
private HookEventFacade hookEventFacade;
|
private HookEventFacade hookEventFacade;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.web;
|
package sonia.scm.web;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
//~--- 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.ServiceNotAuthorizedException;
|
||||||
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
|
||||||
import sonia.scm.protocolcommand.git.BaseReceivePackFactory;
|
import sonia.scm.protocolcommand.git.BaseReceivePackFactory;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.repository.spi.HookEventFacade;
|
import sonia.scm.repository.spi.HookEventFacade;
|
||||||
|
|
||||||
@@ -53,8 +54,8 @@ public class GitReceivePackFactory extends BaseReceivePackFactory<HttpServletReq
|
|||||||
private ReceivePackFactory<HttpServletRequest> wrapped;
|
private ReceivePackFactory<HttpServletRequest> wrapped;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public GitReceivePackFactory(GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
public GitReceivePackFactory(GitChangesetConverterFactory converterFactory, GitRepositoryHandler handler, HookEventFacade hookEventFacade) {
|
||||||
super(handler, hookEventFacade);
|
super(converterFactory, handler, hookEventFacade);
|
||||||
this.wrapped = new DefaultReceivePackFactory();
|
this.wrapped = new DefaultReceivePackFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.protocolcommand.git;
|
package sonia.scm.protocolcommand.git;
|
||||||
|
|
||||||
import org.eclipse.jgit.api.Git;
|
import org.eclipse.jgit.api.Git;
|
||||||
@@ -38,6 +38,7 @@ import org.junit.rules.TemporaryFolder;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.MockitoJUnitRunner;
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitConfig;
|
import sonia.scm.repository.GitConfig;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.web.CollectingPackParserListener;
|
import sonia.scm.web.CollectingPackParserListener;
|
||||||
@@ -82,7 +83,7 @@ public class BaseReceivePackFactoryTest {
|
|||||||
ReceivePack receivePack = new ReceivePack(repository);
|
ReceivePack receivePack = new ReceivePack(repository);
|
||||||
when(wrappedReceivePackFactory.create(request, repository)).thenReturn(receivePack);
|
when(wrappedReceivePackFactory.create(request, repository)).thenReturn(receivePack);
|
||||||
|
|
||||||
factory = new BaseReceivePackFactory<Object>(handler, null) {
|
factory = new BaseReceivePackFactory<Object>(new GitChangesetConverterFactory(), handler, null) {
|
||||||
@Override
|
@Override
|
||||||
protected ReceivePack createBasicReceivePack(Object request, Repository repository) throws ServiceNotEnabledException, ServiceNotAuthorizedException {
|
protected ReceivePack createBasicReceivePack(Object request, Repository repository) throws ServiceNotEnabledException, ServiceNotAuthorizedException {
|
||||||
return wrappedReceivePackFactory.create(request, repository);
|
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
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.repository.client.spi;
|
package sonia.scm.repository.client.spi;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
@@ -32,6 +32,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
|||||||
|
|
||||||
import sonia.scm.repository.Changeset;
|
import sonia.scm.repository.Changeset;
|
||||||
import sonia.scm.repository.GitChangesetConverter;
|
import sonia.scm.repository.GitChangesetConverter;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.client.api.RepositoryClientException;
|
import sonia.scm.repository.client.api.RepositoryClientException;
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
@@ -71,7 +72,8 @@ public class GitCommitCommand implements CommitCommand
|
|||||||
@Override
|
@Override
|
||||||
public Changeset commit(CommitRequest request) throws IOException
|
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()
|
RevCommit commit = git.commit()
|
||||||
.setAuthor(request.getAuthor().getName(), request.getAuthor().getMail())
|
.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
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.repository.spi;
|
package sonia.scm.repository.spi;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
@@ -40,6 +40,7 @@ import org.junit.Before;
|
|||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.rules.TemporaryFolder;
|
import org.junit.rules.TemporaryFolder;
|
||||||
import sonia.scm.repository.Changeset;
|
import sonia.scm.repository.Changeset;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.Repository;
|
||||||
import sonia.scm.user.User;
|
import sonia.scm.user.User;
|
||||||
@@ -110,23 +111,7 @@ public class AbstractRemoteCommandTestBase
|
|||||||
{
|
{
|
||||||
|
|
||||||
// store reference to handle weak references
|
// store reference to handle weak references
|
||||||
proto = new ScmTransportProtocol(new Provider<HookEventFacade>()
|
proto = new ScmTransportProtocol(GitChangesetConverterFactory::new, () -> null, () -> null);
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HookEventFacade get()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}, new Provider<GitRepositoryHandler>()
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public GitRepositoryHandler get()
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Transport.register(proto);
|
Transport.register(proto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,12 +21,13 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sonia.scm.repository.spi;
|
package sonia.scm.repository.spi;
|
||||||
|
|
||||||
import org.eclipse.jgit.transport.ScmTransportProtocol;
|
import org.eclipse.jgit.transport.ScmTransportProtocol;
|
||||||
import org.eclipse.jgit.transport.Transport;
|
import org.eclipse.jgit.transport.Transport;
|
||||||
import org.junit.rules.ExternalResource;
|
import org.junit.rules.ExternalResource;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.repository.PreProcessorUtil;
|
import sonia.scm.repository.PreProcessorUtil;
|
||||||
import sonia.scm.repository.RepositoryManager;
|
import sonia.scm.repository.RepositoryManager;
|
||||||
@@ -47,7 +48,7 @@ public class BindTransportProtocolRule extends ExternalResource {
|
|||||||
RepositoryManager repositoryManager = mock(RepositoryManager.class);
|
RepositoryManager repositoryManager = mock(RepositoryManager.class);
|
||||||
HookEventFacade hookEventFacade = new HookEventFacade(of(repositoryManager), hookContextFactory);
|
HookEventFacade hookEventFacade = new HookEventFacade(of(repositoryManager), hookContextFactory);
|
||||||
GitRepositoryHandler gitRepositoryHandler = mock(GitRepositoryHandler.class);
|
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);
|
Transport.register(scmTransportProtocol);
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import org.junit.Ignore;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider;
|
import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider;
|
||||||
import sonia.scm.repository.ChangesetPagingResult;
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.store.InMemoryConfigurationStoreFactory;
|
import sonia.scm.store.InMemoryConfigurationStoreFactory;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -173,14 +174,11 @@ public class GitIncomingCommandTest
|
|||||||
assertEquals(0, cpr.getTotal());
|
assertEquals(0, cpr.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private GitIncomingCommand createCommand() {
|
||||||
* Method description
|
return new GitIncomingCommand(
|
||||||
*
|
new GitContext(incomingDirectory, incomingRepository, new GitRepositoryConfigStoreProvider(new InMemoryConfigurationStoreFactory())),
|
||||||
*
|
handler,
|
||||||
* @return
|
new GitChangesetConverterFactory()
|
||||||
*/
|
);
|
||||||
private GitIncomingCommand createCommand()
|
|
||||||
{
|
|
||||||
return new GitIncomingCommand(handler, new GitContext(incomingDirectory, incomingRepository, new GitRepositoryConfigStoreProvider(new InMemoryConfigurationStoreFactory())));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ package sonia.scm.repository.spi;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import sonia.scm.NotFoundException;
|
import sonia.scm.NotFoundException;
|
||||||
import sonia.scm.repository.ChangesetPagingResult;
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
@@ -108,8 +109,7 @@ public class GitLogCommandAncestorTest extends AbstractGitCommandTestBase
|
|||||||
createCommand().getChangesets(request);
|
createCommand().getChangesets(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
private GitLogCommand createCommand()
|
private GitLogCommand createCommand() {
|
||||||
{
|
return new GitLogCommand(createContext(), new GitChangesetConverterFactory());
|
||||||
return new GitLogCommand(createContext());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.junit.MockitoJUnitRunner;
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
import sonia.scm.repository.Changeset;
|
import sonia.scm.repository.Changeset;
|
||||||
import sonia.scm.repository.ChangesetPagingResult;
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryConfig;
|
import sonia.scm.repository.GitRepositoryConfig;
|
||||||
import sonia.scm.repository.Modifications;
|
import sonia.scm.repository.Modifications;
|
||||||
import sonia.scm.repository.Person;
|
import sonia.scm.repository.Person;
|
||||||
@@ -293,8 +294,7 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
|
|||||||
return new File(repositoryDirectory, "HEAD");
|
return new File(repositoryDirectory, "HEAD");
|
||||||
}
|
}
|
||||||
|
|
||||||
private GitLogCommand createCommand()
|
private GitLogCommand createCommand() {
|
||||||
{
|
return new GitLogCommand(createContext(), new GitChangesetConverterFactory());
|
||||||
return new GitLogCommand(createContext());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider;
|
import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider;
|
||||||
import sonia.scm.repository.ChangesetPagingResult;
|
import sonia.scm.repository.ChangesetPagingResult;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.store.InMemoryConfigurationStoreFactory;
|
import sonia.scm.store.InMemoryConfigurationStoreFactory;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -151,6 +152,10 @@ public class GitOutgoingCommandTest extends AbstractRemoteCommandTestBase
|
|||||||
*/
|
*/
|
||||||
private GitOutgoingCommand createCommand()
|
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.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.rules.TemporaryFolder;
|
import org.junit.rules.TemporaryFolder;
|
||||||
|
import sonia.scm.repository.GitChangesetConverterFactory;
|
||||||
import sonia.scm.repository.GitRepositoryHandler;
|
import sonia.scm.repository.GitRepositoryHandler;
|
||||||
import sonia.scm.repository.PreProcessorUtil;
|
import sonia.scm.repository.PreProcessorUtil;
|
||||||
import sonia.scm.repository.RepositoryManager;
|
import sonia.scm.repository.RepositoryManager;
|
||||||
@@ -65,7 +66,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
|
|||||||
HookContextFactory hookContextFactory = new HookContextFactory(mock(PreProcessorUtil.class));
|
HookContextFactory hookContextFactory = new HookContextFactory(mock(PreProcessorUtil.class));
|
||||||
HookEventFacade hookEventFacade = new HookEventFacade(of(mock(RepositoryManager.class)), hookContextFactory);
|
HookEventFacade hookEventFacade = new HookEventFacade(of(mock(RepositoryManager.class)), hookContextFactory);
|
||||||
GitRepositoryHandler gitRepositoryHandler = mock(GitRepositoryHandler.class);
|
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);
|
Transport.register(proto);
|
||||||
workdirProvider = new WorkdirProvider(temporaryFolder.newFolder());
|
workdirProvider = new WorkdirProvider(temporaryFolder.newFolder());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user