mirror of
				https://github.com/scm-manager/scm-manager.git
				synced 2025-10-31 18:46:07 +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(); | ||||
|   } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user