From 8df0b53f364175775893f528f612eb86b585c9b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 6 Nov 2018 14:27:08 +0100 Subject: [PATCH] Add command api for dry run merge --- .../sonia/scm/repository/api/Command.java | 7 +- .../api/MergeDryRunCommandBuilder.java | 35 ++++++++++ .../repository/spi/MergeDryRunCommand.java | 5 ++ .../spi/MergeDryRunCommandRequest.java | 70 +++++++++++++++++++ .../spi/RepositoryServiceProvider.java | 8 +++ 5 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 scm-core/src/main/java/sonia/scm/repository/api/MergeDryRunCommandBuilder.java create mode 100644 scm-core/src/main/java/sonia/scm/repository/spi/MergeDryRunCommand.java create mode 100644 scm-core/src/main/java/sonia/scm/repository/spi/MergeDryRunCommandRequest.java diff --git a/scm-core/src/main/java/sonia/scm/repository/api/Command.java b/scm-core/src/main/java/sonia/scm/repository/api/Command.java index fa09cea2cb..2987232ff2 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/Command.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/Command.java @@ -71,5 +71,10 @@ public enum Command /** * @since 2.0 */ - MERGE + MERGE, + + /** + * @since 2.0 + */ + MERGE_DRY_RUN } diff --git a/scm-core/src/main/java/sonia/scm/repository/api/MergeDryRunCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/MergeDryRunCommandBuilder.java new file mode 100644 index 0000000000..852ffdcfbd --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/api/MergeDryRunCommandBuilder.java @@ -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); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/MergeDryRunCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/MergeDryRunCommand.java new file mode 100644 index 0000000000..af4fbe06bd --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/spi/MergeDryRunCommand.java @@ -0,0 +1,5 @@ +package sonia.scm.repository.spi; + +public interface MergeDryRunCommand { + boolean isMergeable(MergeDryRunCommandRequest request); +} diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/MergeDryRunCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/MergeDryRunCommandRequest.java new file mode 100644 index 0000000000..b0cd737bd1 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/spi/MergeDryRunCommandRequest.java @@ -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(); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/RepositoryServiceProvider.java b/scm-core/src/main/java/sonia/scm/repository/spi/RepositoryServiceProvider.java index 77201d1a72..33dd137302 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/RepositoryServiceProvider.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/RepositoryServiceProvider.java @@ -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); + } }