Add command api for merge

This commit is contained in:
René Pfeuffer
2018-11-06 14:10:51 +01:00
parent 1351898399
commit 1854cfcfba
5 changed files with 123 additions and 1 deletions

View File

@@ -66,6 +66,10 @@ public enum Command
/**
* @since 2.0
*/
MODIFICATIONS
MODIFICATIONS,
/**
* @since 2.0
*/
MERGE
}

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 MergeCommandBuilder {
private final MergeCommand mergeCommand;
private final MergeCommandRequest request = new MergeCommandRequest();
public MergeCommandBuilder(MergeCommand mergeCommand) {
this.mergeCommand = mergeCommand;
}
public MergeCommandBuilder setBranchToMerge(String branchToMerge) {
request.setBranchToMerge(branchToMerge);
return this;
}
public MergeCommandBuilder setTargetBranch(String targetBranch) {
request.setTargetBranch(targetBranch);
return this;
}
public MergeCommandBuilder 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 MergeCommand {
boolean merge(MergeCommandRequest 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 MergeCommandRequest 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 MergeCommandRequest other = (MergeCommandRequest) 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

@@ -251,4 +251,12 @@ public abstract class RepositoryServiceProvider implements Closeable
{
throw new CommandNotSupportedException(Command.UNBUNDLE);
}
/**
* @since 2.0
*/
public MergeCommand getMergeCommand()
{
throw new CommandNotSupportedException(Command.MERGE);
}
}