diff --git a/scm-it/src/test/java/sonia/scm/it/MergeDetectionITCase.java b/scm-it/src/test/java/sonia/scm/it/MergeDetectionITCase.java index 6779b76b68..adc5a9efe0 100644 --- a/scm-it/src/test/java/sonia/scm/it/MergeDetectionITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/MergeDetectionITCase.java @@ -91,6 +91,19 @@ public class MergeDetectionITCase { @Test public void shouldDetectSimpleMergeAsMerged() throws IOException { + client.getCheckoutCommand().checkout("master"); + client.getMergeCommand().noFf().merge("develop"); + + initializeMergeDetection("master", "develop"); + + client.getPushCommand().push(); + + Assertions.assertThat(getMergeDetectionResult("preMergeDetection", 0)).isTrue(); + Assertions.assertThat(getMergeDetectionResult("postMergeDetection", 0)).isTrue(); + } + + @Test + public void shouldDetectFastForwardAsMerged() throws IOException { client.getCheckoutCommand().checkout("master"); client.getMergeCommand().merge("develop"); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitMergeCommand.java index 6b27ee4a06..464d32eba6 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/client/spi/GitMergeCommand.java @@ -48,9 +48,25 @@ public class GitMergeCommand implements MergeCommand { public Changeset merge(MergeRequest request) throws IOException { try (GitChangesetConverter converter = new GitChangesetConverter(git.getRepository())) { ObjectId resolved = git.getRepository().resolve(request.getBranch()); - MergeResult mergeResult = git.merge() + org.eclipse.jgit.api.MergeCommand mergeCommand = git.merge() .include(request.getBranch(), resolved) - .setMessage(request.getMessage()) + .setMessage(request.getMessage()); + + switch (request.getFfMode()) { + case FF: + mergeCommand.setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.FF); + break; + case NO_FF: + mergeCommand.setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.NO_FF); + break; + case FF_ONLY: + mergeCommand.setFastForward(org.eclipse.jgit.api.MergeCommand.FastForwardMode.FF_ONLY); + break; + default: + throw new IllegalStateException("Unknown FF mode: " + request.getFfMode()); + } + + MergeResult mergeResult = mergeCommand .call(); try (RevWalk revWalk = new RevWalk(git.getRepository())) { diff --git a/scm-test/src/main/java/sonia/scm/repository/client/api/MergeCommandBuilder.java b/scm-test/src/main/java/sonia/scm/repository/client/api/MergeCommandBuilder.java index 78cbe240d1..ade806ade0 100644 --- a/scm-test/src/main/java/sonia/scm/repository/client/api/MergeCommandBuilder.java +++ b/scm-test/src/main/java/sonia/scm/repository/client/api/MergeCommandBuilder.java @@ -35,13 +35,28 @@ import java.io.IOException; public final class MergeCommandBuilder { private final MergeCommand command; + private final MergeRequest request = new MergeRequest(); MergeCommandBuilder(MergeCommand command) { this.command = command; } + public MergeCommandBuilder ffOnly() { + request.setFfMode(MergeRequest.FastForwardMode.FF_ONLY); + return this; + } + + public MergeCommandBuilder noFf() { + request.setFfMode(MergeRequest.FastForwardMode.NO_FF); + return this; + } + + public MergeCommandBuilder ffIfPossible() { + request.setFfMode(MergeRequest.FastForwardMode.FF); + return this; + } + public void merge(String branch) throws IOException { - MergeRequest request = new MergeRequest(); request.setBranch(branch); command.merge(request); } diff --git a/scm-test/src/main/java/sonia/scm/repository/client/spi/MergeRequest.java b/scm-test/src/main/java/sonia/scm/repository/client/spi/MergeRequest.java index ba7a133cb9..826e5d9f03 100644 --- a/scm-test/src/main/java/sonia/scm/repository/client/spi/MergeRequest.java +++ b/scm-test/src/main/java/sonia/scm/repository/client/spi/MergeRequest.java @@ -34,6 +34,7 @@ public final class MergeRequest { private String branch; private String message; + private FastForwardMode ffMode = FastForwardMode.FF; @Override public boolean equals(Object obj) { @@ -79,6 +80,10 @@ public final class MergeRequest { this.message = message; } + public void setFfMode(FastForwardMode ffMode) { + this.ffMode = ffMode; + } + String getBranch() { return branch; } @@ -86,4 +91,12 @@ public final class MergeRequest { String getMessage() { return message; } + + public FastForwardMode getFfMode() { + return ffMode; + } + + public enum FastForwardMode { + FF_ONLY, FF, NO_FF + } }