From 5a5289f381ff37cebadfed1151a5f15e4abe3e3a Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Tue, 11 Aug 2020 15:04:52 +0200 Subject: [PATCH] fix merge issues --- .../java/sonia/scm/repository/GitChangesetConverter.java | 2 +- .../api/GitReceiveHookMergeDetectionProvider.java | 7 +++++-- .../sonia/scm/repository/spi/GitHookContextProvider.java | 5 ++++- .../main/java/sonia/scm/repository/spi/GitLogCommand.java | 2 +- .../main/java/sonia/scm/repository/spi/GitLogComputer.java | 7 +++++-- .../sonia/scm/repository/client/spi/GitMergeCommand.java | 3 ++- 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java index 4573c61d87..1262353e1d 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverter.java @@ -60,7 +60,7 @@ public class GitChangesetConverter implements Closeable { private final Multimap tags; private final TreeWalk treeWalk; - GitChangesetConverter(GPG gpg, org.eclipse.jgit.lib.Repository repository, RevWalk revWalk) { + public GitChangesetConverter(GPG gpg, org.eclipse.jgit.lib.Repository repository, RevWalk revWalk) { this.gpg = gpg; this.tags = GitUtil.createTagMap(repository, revWalk); this.treeWalk = new TreeWalk(repository); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/api/GitReceiveHookMergeDetectionProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/api/GitReceiveHookMergeDetectionProvider.java index 03a5b59837..bac6eb6348 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/api/GitReceiveHookMergeDetectionProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/api/GitReceiveHookMergeDetectionProvider.java @@ -28,6 +28,7 @@ import org.eclipse.jgit.lib.AnyObjectId; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.ReceiveCommand; +import sonia.scm.repository.GitChangesetConverterFactory; import sonia.scm.repository.GitUtil; import sonia.scm.repository.spi.GitLogComputer; import sonia.scm.repository.spi.HookMergeDetectionProvider; @@ -39,11 +40,13 @@ public class GitReceiveHookMergeDetectionProvider implements HookMergeDetectionP private final Repository repository; private final String repositoryId; private final List receiveCommands; + private final GitChangesetConverterFactory converterFactory; - public GitReceiveHookMergeDetectionProvider(Repository repository, String repositoryId, List receiveCommands) { + public GitReceiveHookMergeDetectionProvider(Repository repository, String repositoryId, List receiveCommands, GitChangesetConverterFactory converterFactory) { this.repository = repository; this.repositoryId = repositoryId; this.receiveCommands = receiveCommands; + this.converterFactory = converterFactory; } @Override @@ -53,7 +56,7 @@ public class GitReceiveHookMergeDetectionProvider implements HookMergeDetectionP request.setAncestorChangeset(findRelevantRevisionForBranchIfToBeUpdated(target)); request.setPagingLimit(1); - return new GitLogComputer(repositoryId, repository).compute(request).getTotal() == 0; + return new GitLogComputer(repositoryId, repository, converterFactory).compute(request).getTotal() == 0; } private String findRelevantRevisionForBranchIfToBeUpdated(String branch) { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitHookContextProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitHookContextProvider.java index 471539529f..13a11007a2 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitHookContextProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitHookContextProvider.java @@ -63,6 +63,8 @@ public class GitHookContextProvider extends HookContextProvider //~--- constructors --------------------------------------------------------- + private final GitChangesetConverterFactory converterFactory; + /** * Constructs a new instance * @param receivePack git receive pack @@ -80,6 +82,7 @@ public class GitHookContextProvider extends HookContextProvider this.repositoryId = repositoryId; this.changesetProvider = new GitHookChangesetProvider(converterFactory, receivePack, receiveCommands); + this.converterFactory = converterFactory; } //~--- methods -------------------------------------------------------------- @@ -111,7 +114,7 @@ public class GitHookContextProvider extends HookContextProvider @Override public HookMergeDetectionProvider getMergeDetectionProvider() { - return new GitReceiveHookMergeDetectionProvider(repository, repositoryId, receiveCommands); + return new GitReceiveHookMergeDetectionProvider(repository, repositoryId, receiveCommands, converterFactory); } @Override diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java index 597d5655da..e0f0b2868b 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java @@ -182,7 +182,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand if (Strings.isNullOrEmpty(request.getBranch())) { request.setBranch(context.getConfig().getDefaultBranch()); } - return new GitLogComputer(this.repository.getId(), gitRepository).compute(request); + return new GitLogComputer(this.repository.getId(), gitRepository, converterFactory).compute(request); } catch (IOException e) { throw new InternalRepositoryException(repository, "could not create change log", e); } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogComputer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogComputer.java index eae8ea5851..b33460fb37 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogComputer.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogComputer.java @@ -42,6 +42,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; @@ -59,10 +60,12 @@ public class GitLogComputer { private final String repositoryId; private final Repository gitRepository; + private final GitChangesetConverterFactory converterFactory; - public GitLogComputer(String repositoryId, Repository repository) { + public GitLogComputer(String repositoryId, Repository repository, GitChangesetConverterFactory converterFactory) { this.repositoryId = repositoryId; this.gitRepository = repository; + this.converterFactory = converterFactory; } public ChangesetPagingResult compute(LogCommandRequest request) { @@ -123,7 +126,7 @@ public class GitLogComputer { revWalk = new RevWalk(gitRepository); - converter = new GitChangesetConverter(gitRepository, revWalk); + converter = converterFactory.create(gitRepository, revWalk); if (!Strings.isNullOrEmpty(request.getPath())) { revWalk.setTreeFilter( diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitMergeCommand.java index 464d32eba6..df8519fc1b 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitMergeCommand.java @@ -32,6 +32,7 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; import sonia.scm.repository.Changeset; import sonia.scm.repository.GitChangesetConverter; +import sonia.scm.repository.GitTestHelper; import sonia.scm.repository.client.api.RepositoryClientException; import java.io.IOException; @@ -46,7 +47,7 @@ public class GitMergeCommand implements MergeCommand { @Override public Changeset merge(MergeRequest request) throws IOException { - try (GitChangesetConverter converter = new GitChangesetConverter(git.getRepository())) { + try (GitChangesetConverter converter = GitTestHelper.createConverterFactory().create(git.getRepository())) { ObjectId resolved = git.getRepository().resolve(request.getBranch()); org.eclipse.jgit.api.MergeCommand mergeCommand = git.merge() .include(request.getBranch(), resolved)