Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Rosenberg2013-01-29 00:02:18 +0000
committerGerrit Code Review @ Eclipse.org2013-01-29 00:02:18 +0000
commit83032e9f66552a43504456233ad9900bc2712077 (patch)
tree68a81f503a08f92ca163cb8bc975ede50c0bf454
parentee413067fded57d817af5b6b9978b8ceb6e6374e (diff)
parent642ff2cd7dd6ae361e4993255ade89a32e20601f (diff)
downloadjgit-83032e9f66552a43504456233ad9900bc2712077.tar.gz
jgit-83032e9f66552a43504456233ad9900bc2712077.tar.xz
jgit-83032e9f66552a43504456233ad9900bc2712077.zip
Merge "Check for FF_ONLY merges correctly"
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java39
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java4
2 files changed, 41 insertions, 2 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java
index 589845ef67..df3cf58424 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java
@@ -52,6 +52,7 @@ import static org.junit.Assert.fail;
import java.io.File;
import java.util.Iterator;
+import org.eclipse.jgit.api.MergeCommand.FastForwardMode;
import org.eclipse.jgit.api.MergeResult.MergeStatus;
import org.eclipse.jgit.api.errors.InvalidMergeHeadsException;
import org.eclipse.jgit.lib.Constants;
@@ -203,6 +204,28 @@ public class MergeCommandTest extends RepositoryTestCase {
}
}
+ @Test
+ public void testMergeCannotDoRequiredFastForward() throws Exception {
+ Git git = new Git(db);
+
+ RevCommit first = git.commit().setMessage("first").call();
+ createBranch(first, "refs/heads/side");
+
+ writeTrashFile("a", "a");
+ git.add().addFilepattern("a").call();
+ git.commit().setMessage("second").call();
+
+ checkoutBranch("refs/heads/side");
+ writeTrashFile("b", "b");
+ git.add().addFilepattern("b").call();
+ git.commit().setMessage("third").call();
+
+ MergeResult result = git.merge().include(db.getRef(Constants.MASTER))
+ .setFastForward(FastForwardMode.NO_FF)
+ .call();
+ assertEquals(MergeStatus.ABORTED, result.getMergeStatus());
+ }
+
@Theory
public void testMergeSuccessAllStrategies(MergeStrategy mergeStrategy)
throws Exception {
@@ -1328,6 +1351,22 @@ public class MergeCommandTest extends RepositoryTestCase {
assertEquals(StatusCommandTest.set("file2"), stat.getConflicting());
}
+ @Test
+ public void testFastForwardOnly() throws Exception {
+ Git git = new Git(db);
+ RevCommit initialCommit = git.commit().setMessage("initial commit")
+ .call();
+ createBranch(initialCommit, "refs/heads/branch1");
+ git.commit().setMessage("second commit").call();
+ checkoutBranch("refs/heads/branch1");
+
+ MergeCommand merge = git.merge();
+ merge.setFastForward(FastForwardMode.FF_ONLY);
+ merge.include(db.getRef(Constants.MASTER));
+ MergeResult result = merge.call();
+
+ assertEquals(MergeStatus.FAST_FORWARD, result.getMergeStatus());
+ }
private static void setExecutable(Git git, String path, boolean executable) {
FS.DETECTED.setExecute(
new File(git.getRepository().getWorkTree(), path), executable);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java
index 2d3a6e1877..aacc970e5e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java
@@ -269,7 +269,7 @@ public class MergeCommand extends GitCommand<MergeResult> {
headCommit, srcCommit },
MergeStatus.ALREADY_UP_TO_DATE, mergeStrategy, null, null);
} else if (revWalk.isMergedInto(headCommit, srcCommit)
- && fastForwardMode == FastForwardMode.FF) {
+ && fastForwardMode != FastForwardMode.NO_FF) {
// FAST_FORWARD detected: skip doing a real merge but only
// update HEAD
refLogMessage.append(": " + MergeStatus.FAST_FORWARD); //$NON-NLS-1$
@@ -300,7 +300,7 @@ public class MergeCommand extends GitCommand<MergeResult> {
headCommit, srcCommit }, mergeStatus, mergeStrategy,
null, msg);
} else {
- if (fastForwardMode == FastForwardMode.FF_ONLY) {
+ if (fastForwardMode == FastForwardMode.NO_FF) {
return new MergeResult(headCommit, srcCommit,
new ObjectId[] { headCommit, srcCommit },
MergeStatus.ABORTED, mergeStrategy, null, null);

Back to the top