Fix messages for post commit hooks in git (#1647)

Fixes the transmission of messages from post commit hooks in Git repositories. We therefore use a new method patched in jGit for SCM-Manager. This simplifies the trigger logic a lot.
This commit is contained in:
René Pfeuffer
2021-05-04 16:53:43 +02:00
committed by GitHub
parent 579b58ba5f
commit 77b62be68a
13 changed files with 75 additions and 236 deletions

View File

@@ -24,7 +24,6 @@
package sonia.scm.repository.spi;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.eclipse.jgit.transport.ScmTransportProtocol;
import org.eclipse.jgit.transport.Transport;
import org.junit.rules.ExternalResource;
@@ -33,7 +32,6 @@ import sonia.scm.repository.GitTestHelper;
import sonia.scm.repository.PreProcessorUtil;
import sonia.scm.repository.RepositoryManager;
import sonia.scm.repository.api.HookContextFactory;
import sonia.scm.web.GitHookEventFacade;
import static com.google.inject.util.Providers.of;
import static org.mockito.ArgumentMatchers.any;
@@ -45,12 +43,12 @@ class BindTransportProtocolRule extends ExternalResource {
private ScmTransportProtocol scmTransportProtocol;
RepositoryManager repositoryManager = mock(RepositoryManager.class);
GitHookEventFacade hookEventFacade;
HookEventFacade hookEventFacade;
@Override
protected void before() {
HookContextFactory hookContextFactory = new HookContextFactory(mock(PreProcessorUtil.class));
hookEventFacade = new GitHookEventFacade(new HookEventFacade(of(repositoryManager), hookContextFactory), new SimpleMeterRegistry());
hookEventFacade = new HookEventFacade(of(repositoryManager), hookContextFactory);
GitRepositoryHandler gitRepositoryHandler = mock(GitRepositoryHandler.class);
scmTransportProtocol = new ScmTransportProtocol(of(GitTestHelper.createConverterFactory()), of(hookEventFacade), of(gitRepositoryHandler));
@@ -63,6 +61,5 @@ class BindTransportProtocolRule extends ExternalResource {
@Override
protected void after() {
Transport.unregister(scmTransportProtocol);
hookEventFacade.close();
}
}

View File

@@ -31,7 +31,6 @@ import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.ScmTransportProtocol;
import org.eclipse.jgit.transport.Transport;
import org.eclipse.jgit.transport.URIish;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -44,7 +43,6 @@ import sonia.scm.repository.api.HookContextFactory;
import sonia.scm.repository.work.NoneCachingWorkingCopyPool;
import sonia.scm.repository.work.WorkdirProvider;
import sonia.scm.repository.work.WorkingCopy;
import sonia.scm.web.GitHookEventFacade;
import java.io.File;
import java.io.IOException;
@@ -63,23 +61,17 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
// keep this so that it will not be garbage collected (Transport keeps this in a week reference)
private ScmTransportProtocol proto;
private WorkdirProvider workdirProvider;
GitHookEventFacade hookEventFacade;
@Before
public void bindScmProtocol() throws IOException {
HookContextFactory hookContextFactory = new HookContextFactory(mock(PreProcessorUtil.class));
hookEventFacade = new GitHookEventFacade(new HookEventFacade(of(mock(RepositoryManager.class)), hookContextFactory), new SimpleMeterRegistry());
HookEventFacade hookEventFacade = new HookEventFacade(of(mock(RepositoryManager.class)), hookContextFactory);
GitRepositoryHandler gitRepositoryHandler = mock(GitRepositoryHandler.class);
proto = new ScmTransportProtocol(of(GitTestHelper.createConverterFactory()), of(hookEventFacade), of(gitRepositoryHandler));
Transport.register(proto);
workdirProvider = new WorkdirProvider(temporaryFolder.newFolder(), repositoryLocationResolver, false);
}
@After
public void close() {
hookEventFacade.close();
}
@Test
public void emptyPoolShouldCreateNewWorkdir() {
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider), new SimpleMeterRegistry());