Add command api for dry run merge

This commit is contained in:
René Pfeuffer
2018-11-06 14:27:08 +01:00
parent 1854cfcfba
commit 8df0b53f36
5 changed files with 124 additions and 1 deletions

View File

@@ -71,5 +71,10 @@ public enum Command
/**
* @since 2.0
*/
MERGE
MERGE,
/**
* @since 2.0
*/
MERGE_DRY_RUN
}

View File

@@ -0,0 +1,35 @@
package sonia.scm.repository.api;
import com.google.common.base.Preconditions;
import sonia.scm.repository.spi.MergeCommand;
import sonia.scm.repository.spi.MergeCommandRequest;
public class MergeDryRunCommandBuilder {
private final MergeCommand mergeCommand;
private final MergeCommandRequest request = new MergeCommandRequest();
public MergeDryRunCommandBuilder(MergeCommand mergeCommand) {
this.mergeCommand = mergeCommand;
}
public MergeDryRunCommandBuilder setBranchToMerge(String branchToMerge) {
request.setBranchToMerge(branchToMerge);
return this;
}
public MergeDryRunCommandBuilder setTargetBranch(String targetBranch) {
request.setTargetBranch(targetBranch);
return this;
}
public MergeDryRunCommandBuilder reset() {
request.reset();
return this;
}
public boolean execute() {
Preconditions.checkArgument(request.isValid(), "revision to merge and target revision is required");
return mergeCommand.merge(request);
}
}

View File

@@ -0,0 +1,5 @@
package sonia.scm.repository.spi;
public interface MergeDryRunCommand {
boolean isMergeable(MergeDryRunCommandRequest request);
}

View File

@@ -0,0 +1,70 @@
package sonia.scm.repository.spi;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.base.Strings;
import sonia.scm.Validateable;
import java.io.Serializable;
public class MergeDryRunCommandRequest implements Validateable, Resetable, Serializable, Cloneable {
private static final long serialVersionUID = -2650236557922431528L;
private String branchToMerge;
private String targetBranch;
public String getBranchToMerge() {
return branchToMerge;
}
public void setBranchToMerge(String branchToMerge) {
this.branchToMerge = branchToMerge;
}
public String getTargetBranch() {
return targetBranch;
}
public void setTargetBranch(String targetBranch) {
this.targetBranch = targetBranch;
}
public boolean isValid() {
return !Strings.isNullOrEmpty(getBranchToMerge()) && !Strings.isNullOrEmpty(getTargetBranch());
}
public void reset() {
this.setBranchToMerge(null);
this.setTargetBranch(null);
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final MergeDryRunCommandRequest other = (MergeDryRunCommandRequest) obj;
return Objects.equal(branchToMerge, other.branchToMerge)
&& Objects.equal(targetBranch, other.targetBranch);
}
@Override
public int hashCode() {
return Objects.hashCode(branchToMerge, targetBranch);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("branchToMerge", branchToMerge)
.add("targetBranch", targetBranch)
.toString();
}
}

View File

@@ -259,4 +259,12 @@ public abstract class RepositoryServiceProvider implements Closeable
{
throw new CommandNotSupportedException(Command.MERGE);
}
/**
* @since 2.0
*/
public MergeDryRunCommand getMergeDryRunCommand()
{
throw new CommandNotSupportedException(Command.MERGE_DRY_RUN);
}
}