fix merge issues

This commit is contained in:
Konstantin Schaper
2020-08-11 15:04:52 +02:00
parent 8576b66559
commit 5a5289f381
6 changed files with 18 additions and 8 deletions

View File

@@ -60,7 +60,7 @@ public class GitChangesetConverter implements Closeable {
private final Multimap<ObjectId, String> tags; private final Multimap<ObjectId, String> tags;
private final TreeWalk treeWalk; 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.gpg = gpg;
this.tags = GitUtil.createTagMap(repository, revWalk); this.tags = GitUtil.createTagMap(repository, revWalk);
this.treeWalk = new TreeWalk(repository); this.treeWalk = new TreeWalk(repository);

View File

@@ -28,6 +28,7 @@ import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.ReceiveCommand; import org.eclipse.jgit.transport.ReceiveCommand;
import sonia.scm.repository.GitChangesetConverterFactory;
import sonia.scm.repository.GitUtil; import sonia.scm.repository.GitUtil;
import sonia.scm.repository.spi.GitLogComputer; import sonia.scm.repository.spi.GitLogComputer;
import sonia.scm.repository.spi.HookMergeDetectionProvider; import sonia.scm.repository.spi.HookMergeDetectionProvider;
@@ -39,11 +40,13 @@ public class GitReceiveHookMergeDetectionProvider implements HookMergeDetectionP
private final Repository repository; private final Repository repository;
private final String repositoryId; private final String repositoryId;
private final List<ReceiveCommand> receiveCommands; private final List<ReceiveCommand> receiveCommands;
private final GitChangesetConverterFactory converterFactory;
public GitReceiveHookMergeDetectionProvider(Repository repository, String repositoryId, List<ReceiveCommand> receiveCommands) { public GitReceiveHookMergeDetectionProvider(Repository repository, String repositoryId, List<ReceiveCommand> receiveCommands, GitChangesetConverterFactory converterFactory) {
this.repository = repository; this.repository = repository;
this.repositoryId = repositoryId; this.repositoryId = repositoryId;
this.receiveCommands = receiveCommands; this.receiveCommands = receiveCommands;
this.converterFactory = converterFactory;
} }
@Override @Override
@@ -53,7 +56,7 @@ public class GitReceiveHookMergeDetectionProvider implements HookMergeDetectionP
request.setAncestorChangeset(findRelevantRevisionForBranchIfToBeUpdated(target)); request.setAncestorChangeset(findRelevantRevisionForBranchIfToBeUpdated(target));
request.setPagingLimit(1); 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) { private String findRelevantRevisionForBranchIfToBeUpdated(String branch) {

View File

@@ -63,6 +63,8 @@ public class GitHookContextProvider extends HookContextProvider
//~--- constructors --------------------------------------------------------- //~--- constructors ---------------------------------------------------------
private final GitChangesetConverterFactory converterFactory;
/** /**
* Constructs a new instance * Constructs a new instance
* @param receivePack git receive pack * @param receivePack git receive pack
@@ -80,6 +82,7 @@ public class GitHookContextProvider extends HookContextProvider
this.repositoryId = repositoryId; this.repositoryId = repositoryId;
this.changesetProvider = new GitHookChangesetProvider(converterFactory, receivePack, this.changesetProvider = new GitHookChangesetProvider(converterFactory, receivePack,
receiveCommands); receiveCommands);
this.converterFactory = converterFactory;
} }
//~--- methods -------------------------------------------------------------- //~--- methods --------------------------------------------------------------
@@ -111,7 +114,7 @@ public class GitHookContextProvider extends HookContextProvider
@Override @Override
public HookMergeDetectionProvider getMergeDetectionProvider() { public HookMergeDetectionProvider getMergeDetectionProvider() {
return new GitReceiveHookMergeDetectionProvider(repository, repositoryId, receiveCommands); return new GitReceiveHookMergeDetectionProvider(repository, repositoryId, receiveCommands, converterFactory);
} }
@Override @Override

View File

@@ -182,7 +182,7 @@ public class GitLogCommand extends AbstractGitCommand implements LogCommand
if (Strings.isNullOrEmpty(request.getBranch())) { if (Strings.isNullOrEmpty(request.getBranch())) {
request.setBranch(context.getConfig().getDefaultBranch()); 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) { } catch (IOException e) {
throw new InternalRepositoryException(repository, "could not create change log", e); throw new InternalRepositoryException(repository, "could not create change log", e);
} }

View File

@@ -42,6 +42,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;
@@ -59,10 +60,12 @@ public class GitLogComputer {
private final String repositoryId; private final String repositoryId;
private final Repository gitRepository; 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.repositoryId = repositoryId;
this.gitRepository = repository; this.gitRepository = repository;
this.converterFactory = converterFactory;
} }
public ChangesetPagingResult compute(LogCommandRequest request) { public ChangesetPagingResult compute(LogCommandRequest request) {
@@ -123,7 +126,7 @@ public class GitLogComputer {
revWalk = new RevWalk(gitRepository); revWalk = new RevWalk(gitRepository);
converter = new GitChangesetConverter(gitRepository, revWalk); converter = converterFactory.create(gitRepository, revWalk);
if (!Strings.isNullOrEmpty(request.getPath())) { if (!Strings.isNullOrEmpty(request.getPath())) {
revWalk.setTreeFilter( revWalk.setTreeFilter(

View File

@@ -32,6 +32,7 @@ import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.RevWalk;
import sonia.scm.repository.Changeset; import sonia.scm.repository.Changeset;
import sonia.scm.repository.GitChangesetConverter; import sonia.scm.repository.GitChangesetConverter;
import sonia.scm.repository.GitTestHelper;
import sonia.scm.repository.client.api.RepositoryClientException; import sonia.scm.repository.client.api.RepositoryClientException;
import java.io.IOException; import java.io.IOException;
@@ -46,7 +47,7 @@ public class GitMergeCommand implements MergeCommand {
@Override @Override
public Changeset merge(MergeRequest request) throws IOException { 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()); ObjectId resolved = git.getRepository().resolve(request.getBranch());
org.eclipse.jgit.api.MergeCommand mergeCommand = git.merge() org.eclipse.jgit.api.MergeCommand mergeCommand = git.merge()
.include(request.getBranch(), resolved) .include(request.getBranch(), resolved)