mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-12-21 15:59:48 +01:00
fix merge issues
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user