mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-05-06 19:35:51 +02:00
check if mergeStrategy is supported for mergeCommand
This commit is contained in:
@@ -55,6 +55,15 @@ public class MergeCommandBuilder {
|
||||
this.mergeCommand = mergeCommand;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this to check if merge-strategy is supported by mergeCommand
|
||||
*
|
||||
* @return boolean.
|
||||
*/
|
||||
public boolean isSupported(MergeStrategy strategy) {
|
||||
return mergeCommand.isSupported(strategy);
|
||||
}
|
||||
|
||||
/**
|
||||
* Use this to set the branch that should be merged into the target branch.
|
||||
*
|
||||
@@ -99,8 +108,8 @@ public class MergeCommandBuilder {
|
||||
*
|
||||
* @return This builder instance.
|
||||
*/
|
||||
public MergeCommandBuilder setMergeStrategy(ScmMergeStrategy strategy) {
|
||||
request.setScmMergeStrategy(strategy);
|
||||
public MergeCommandBuilder setMergeStrategy(MergeStrategy strategy) {
|
||||
request.setMergeStrategy(strategy);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
package sonia.scm.repository.api;
|
||||
|
||||
public enum ScmMergeStrategy {
|
||||
public enum MergeStrategy {
|
||||
SQUASH
|
||||
}
|
||||
@@ -2,9 +2,12 @@ package sonia.scm.repository.spi;
|
||||
|
||||
import sonia.scm.repository.api.MergeCommandResult;
|
||||
import sonia.scm.repository.api.MergeDryRunCommandResult;
|
||||
import sonia.scm.repository.api.MergeStrategy;
|
||||
|
||||
public interface MergeCommand {
|
||||
MergeCommandResult merge(MergeCommandRequest request);
|
||||
|
||||
MergeDryRunCommandResult dryRun(MergeCommandRequest request);
|
||||
|
||||
boolean isSupported(MergeStrategy strategy);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.google.common.base.Objects;
|
||||
import com.google.common.base.Strings;
|
||||
import sonia.scm.Validateable;
|
||||
import sonia.scm.repository.Person;
|
||||
import sonia.scm.repository.api.ScmMergeStrategy;
|
||||
import sonia.scm.repository.api.MergeStrategy;
|
||||
import sonia.scm.repository.util.AuthorUtil.CommandWithAuthor;
|
||||
|
||||
import java.io.Serializable;
|
||||
@@ -18,7 +18,7 @@ public class MergeCommandRequest implements Validateable, Resetable, Serializabl
|
||||
private String targetBranch;
|
||||
private Person author;
|
||||
private String messageTemplate;
|
||||
private ScmMergeStrategy scmMergeStrategy;
|
||||
private MergeStrategy mergeStrategy;
|
||||
|
||||
public String getBranchToMerge() {
|
||||
return branchToMerge;
|
||||
@@ -52,12 +52,12 @@ public class MergeCommandRequest implements Validateable, Resetable, Serializabl
|
||||
this.messageTemplate = messageTemplate;
|
||||
}
|
||||
|
||||
public ScmMergeStrategy getScmMergeStrategy() {
|
||||
return scmMergeStrategy;
|
||||
public MergeStrategy getMergeStrategy() {
|
||||
return mergeStrategy;
|
||||
}
|
||||
|
||||
public void setScmMergeStrategy(ScmMergeStrategy scmMergeStrategy) {
|
||||
this.scmMergeStrategy = scmMergeStrategy;
|
||||
public void setMergeStrategy(MergeStrategy mergeStrategy) {
|
||||
this.mergeStrategy = mergeStrategy;
|
||||
}
|
||||
|
||||
public boolean isValid() {
|
||||
@@ -85,12 +85,12 @@ public class MergeCommandRequest implements Validateable, Resetable, Serializabl
|
||||
return Objects.equal(branchToMerge, other.branchToMerge)
|
||||
&& Objects.equal(targetBranch, other.targetBranch)
|
||||
&& Objects.equal(author, other.author)
|
||||
&& Objects.equal(scmMergeStrategy, other.scmMergeStrategy);
|
||||
&& Objects.equal(mergeStrategy, other.mergeStrategy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(branchToMerge, targetBranch, author, scmMergeStrategy);
|
||||
return Objects.hashCode(branchToMerge, targetBranch, author, mergeStrategy);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -99,7 +99,7 @@ public class MergeCommandRequest implements Validateable, Resetable, Serializabl
|
||||
.add("branchToMerge", branchToMerge)
|
||||
.add("targetBranch", targetBranch)
|
||||
.add("author", author)
|
||||
.add("mergeStrategy", scmMergeStrategy)
|
||||
.add("mergeStrategy", mergeStrategy)
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package sonia.scm.repository.spi;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import org.eclipse.jgit.api.Git;
|
||||
import org.eclipse.jgit.api.MergeCommand.FastForwardMode;
|
||||
import org.eclipse.jgit.api.MergeResult;
|
||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.Repository;
|
||||
import org.eclipse.jgit.merge.MergeStrategy;
|
||||
import org.eclipse.jgit.merge.ResolveMerger;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -16,10 +16,11 @@ import sonia.scm.repository.InternalRepositoryException;
|
||||
import sonia.scm.repository.Person;
|
||||
import sonia.scm.repository.api.MergeCommandResult;
|
||||
import sonia.scm.repository.api.MergeDryRunCommandResult;
|
||||
import sonia.scm.repository.api.ScmMergeStrategy;
|
||||
import sonia.scm.repository.api.MergeStrategy;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Set;
|
||||
|
||||
public class GitMergeCommand extends AbstractGitCommand implements MergeCommand {
|
||||
|
||||
@@ -32,6 +33,8 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
|
||||
|
||||
private final GitWorkdirFactory workdirFactory;
|
||||
|
||||
private static final Set<MergeStrategy> STRATEGIES = ImmutableSet.of(MergeStrategy.SQUASH);
|
||||
|
||||
GitMergeCommand(GitContext context, sonia.scm.repository.Repository repository, GitWorkdirFactory workdirFactory) {
|
||||
super(context, repository);
|
||||
this.workdirFactory = workdirFactory;
|
||||
@@ -46,7 +49,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
|
||||
public MergeDryRunCommandResult dryRun(MergeCommandRequest request) {
|
||||
try {
|
||||
Repository repository = context.open();
|
||||
ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(repository, true);
|
||||
ResolveMerger merger = (ResolveMerger) org.eclipse.jgit.merge.MergeStrategy.RECURSIVE.newMerger(repository, true);
|
||||
return new MergeDryRunCommandResult(
|
||||
merger.merge(
|
||||
resolveRevisionOrThrowNotFound(repository, request.getBranchToMerge()),
|
||||
@@ -56,13 +59,18 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSupported(MergeStrategy strategy) {
|
||||
return STRATEGIES.contains(strategy);
|
||||
}
|
||||
|
||||
private class MergeWorker extends GitCloneWorker<MergeCommandResult> {
|
||||
|
||||
private final String target;
|
||||
private final String toMerge;
|
||||
private final Person author;
|
||||
private final String messageTemplate;
|
||||
private final ScmMergeStrategy scmMergeStrategy;
|
||||
private final MergeStrategy mergeStrategy;
|
||||
|
||||
private MergeWorker(Git clone, MergeCommandRequest request) {
|
||||
super(clone);
|
||||
@@ -70,7 +78,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
|
||||
this.toMerge = request.getBranchToMerge();
|
||||
this.author = request.getAuthor();
|
||||
this.messageTemplate = request.getMessageTemplate();
|
||||
this.scmMergeStrategy = request.getScmMergeStrategy();
|
||||
this.mergeStrategy = request.getMergeStrategy();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -94,7 +102,7 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand
|
||||
.setCommit(false) // we want to set the author manually
|
||||
.include(toMerge, sourceRevision);
|
||||
|
||||
if (scmMergeStrategy == ScmMergeStrategy.SQUASH) {
|
||||
if (mergeStrategy == MergeStrategy.SQUASH) {
|
||||
mergeCommand.setSquash(true);
|
||||
} else {
|
||||
mergeCommand.setFastForward(FastForwardMode.NO_FF);
|
||||
|
||||
@@ -15,7 +15,7 @@ import org.junit.Test;
|
||||
import sonia.scm.NotFoundException;
|
||||
import sonia.scm.repository.Person;
|
||||
import sonia.scm.repository.api.MergeCommandResult;
|
||||
import sonia.scm.repository.api.ScmMergeStrategy;
|
||||
import sonia.scm.repository.api.MergeStrategy;
|
||||
import sonia.scm.repository.util.WorkdirProvider;
|
||||
import sonia.scm.user.User;
|
||||
|
||||
@@ -221,7 +221,7 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase {
|
||||
request.setBranchToMerge("squash");
|
||||
request.setTargetBranch("master");
|
||||
request.setMessageTemplate("this is a squash");
|
||||
request.setScmMergeStrategy(ScmMergeStrategy.SQUASH);
|
||||
request.setMergeStrategy(MergeStrategy.SQUASH);
|
||||
|
||||
MergeCommandResult mergeCommandResult = command.merge(request);
|
||||
|
||||
@@ -244,7 +244,7 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase {
|
||||
request.setBranchToMerge("squash");
|
||||
request.setTargetBranch("master");
|
||||
request.setMessageTemplate("squash three commits");
|
||||
request.setScmMergeStrategy(ScmMergeStrategy.SQUASH);
|
||||
request.setMergeStrategy(MergeStrategy.SQUASH);
|
||||
Repository gitRepository = createContext().open();
|
||||
MergeCommandResult mergeCommandResult = command.merge(request);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user