From c98abc9c0586c73ef7df4172644b7dd21c979e9d Mon Sep 17 00:00:00 2001 From: Tomasz Zarna Date: Fri, 7 Dec 2012 22:45:01 +0100 Subject: [PATCH] Add additional FastForwardMode enums for different config contexts FastForwardMode should be represented by different enums depending on context it is set or get from. E.g. FastForwardMode.FF_ONLY for branch..mergeoptions is "--ff-only" but for merge.ff it is "only". Change-Id: I3ecc16d48e715b81320b73ffae4caf3558f965f2 --- .../tst/org/eclipse/jgit/lib/ConfigTest.java | 79 +++++++++++- .../org/eclipse/jgit/api/MergeCommand.java | 116 ++++++++++++++++++ .../src/org/eclipse/jgit/lib/Config.java | 4 +- .../org/eclipse/jgit/lib/ConfigConstants.java | 3 + 4 files changed, 198 insertions(+), 4 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java index e67560929..f02012eb5 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java @@ -63,6 +63,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.Set; +import org.eclipse.jgit.api.MergeCommand.FastForwardMode; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.junit.MockSystemReader; import org.eclipse.jgit.util.FS; @@ -287,7 +288,7 @@ public class ConfigTest { assertSame(CoreConfig.AutoCRLF.FALSE, c.getEnum("s", null, "d", CoreConfig.AutoCRLF.FALSE)); - c = parse("[s \"b\"]\n\tc = one two\n"); + c = parse("[s \"b\"]\n\tc = one-two\n"); assertSame(TestEnum.ONE_TWO, c.getEnum("s", "b", "c", TestEnum.ONE_TWO)); } @@ -295,7 +296,81 @@ public class ConfigTest { public void testSetEnum() { final Config c = new Config(); c.setEnum("s", "b", "c", TestEnum.ONE_TWO); - assertEquals("[s \"b\"]\n\tc = one two\n", c.toText()); + assertEquals("[s \"b\"]\n\tc = one-two\n", c.toText()); + } + + @Test + public void testGetFastForwardMergeoptions() throws ConfigInvalidException { + Config c = new Config(null); // not set + assertSame(FastForwardMode.MergeOptions.__FF, c.getEnum( + ConfigConstants.CONFIG_BRANCH_SECTION, "side", + ConfigConstants.CONFIG_KEY_MERGEOPTIONS, + FastForwardMode.MergeOptions.__FF)); + c = parse("[branch \"side\"]\n\tmergeoptions = --ff-only\n"); + assertSame(FastForwardMode.MergeOptions.__FF_ONLY, c.getEnum( + ConfigConstants.CONFIG_BRANCH_SECTION, "side", + ConfigConstants.CONFIG_KEY_MERGEOPTIONS, + FastForwardMode.MergeOptions.__FF_ONLY)); + c = parse("[branch \"side\"]\n\tmergeoptions = --ff\n"); + assertSame(FastForwardMode.MergeOptions.__FF, c.getEnum( + ConfigConstants.CONFIG_BRANCH_SECTION, "side", + ConfigConstants.CONFIG_KEY_MERGEOPTIONS, + FastForwardMode.MergeOptions.__FF)); + c = parse("[branch \"side\"]\n\tmergeoptions = --no-ff\n"); + assertSame(FastForwardMode.MergeOptions.__NO_FF, c.getEnum( + ConfigConstants.CONFIG_BRANCH_SECTION, "side", + ConfigConstants.CONFIG_KEY_MERGEOPTIONS, + FastForwardMode.MergeOptions.__NO_FF)); + } + + @Test + public void testSetFastForwardMergeoptions() { + final Config c = new Config(); + c.setEnum("branch", "side", "mergeoptions", + FastForwardMode.MergeOptions.valueOf(FastForwardMode.FF)); + assertEquals("[branch \"side\"]\n\tmergeoptions = --ff\n", c.toText()); + c.setEnum("branch", "side", "mergeoptions", + FastForwardMode.MergeOptions.valueOf(FastForwardMode.FF_ONLY)); + assertEquals("[branch \"side\"]\n\tmergeoptions = --ff-only\n", + c.toText()); + c.setEnum("branch", "side", "mergeoptions", + FastForwardMode.MergeOptions.valueOf(FastForwardMode.NO_FF)); + assertEquals("[branch \"side\"]\n\tmergeoptions = --no-ff\n", + c.toText()); + } + + @Test + public void testGetFastForwardMerge() throws ConfigInvalidException { + Config c = new Config(null); // not set + assertSame(FastForwardMode.Merge.TRUE, c.getEnum( + ConfigConstants.CONFIG_KEY_MERGE, null, + ConfigConstants.CONFIG_KEY_FF, FastForwardMode.Merge.TRUE)); + c = parse("[merge]\n\tff = only\n"); + assertSame(FastForwardMode.Merge.ONLY, c.getEnum( + ConfigConstants.CONFIG_KEY_MERGE, null, + ConfigConstants.CONFIG_KEY_FF, FastForwardMode.Merge.ONLY)); + c = parse("[merge]\n\tff = true\n"); + assertSame(FastForwardMode.Merge.TRUE, c.getEnum( + ConfigConstants.CONFIG_KEY_MERGE, null, + ConfigConstants.CONFIG_KEY_FF, FastForwardMode.Merge.TRUE)); + c = parse("[merge]\n\tff = false\n"); + assertSame(FastForwardMode.Merge.FALSE, c.getEnum( + ConfigConstants.CONFIG_KEY_MERGE, null, + ConfigConstants.CONFIG_KEY_FF, FastForwardMode.Merge.FALSE)); + } + + @Test + public void testSetFastForwardMerge() { + final Config c = new Config(); + c.setEnum("merge", null, "ff", FastForwardMode.Merge.valueOf(FastForwardMode.FF)); + assertEquals("[merge]\n\tff = true\n", c.toText()); + c.setEnum("merge", null, "ff", + FastForwardMode.Merge.valueOf(FastForwardMode.FF_ONLY)); + assertEquals("[merge]\n\tff = only\n", + c.toText()); + c.setEnum("merge", null, "ff", + FastForwardMode.Merge.valueOf(FastForwardMode.NO_FF)); + assertEquals("[merge]\n\tff = false\n", c.toText()); } @Test 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 04d91af4b..118e378ce 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java @@ -121,6 +121,122 @@ public class MergeCommand extends GitCommand { * forward). */ FF_ONLY; + + /** + * The modes available for fast forward merges corresponding to the + * options under branch..branch config option. + */ + public enum MergeOptions { + /** + * {@link FastForwardMode#FF}. + */ + __FF, + /** + * {@link FastForwardMode#NO_FF}. + */ + __NO_FF, + /** + * {@link FastForwardMode#FF_ONLY}. + */ + __FF_ONLY; + + /** + * Map from FastForwardMode to + * FastForwardMode.MergeOptions. + * + * @param ffMode + * the FastForwardMode value to be mapped + * @return the mapped code>FastForwardMode.MergeOptions value + */ + public static MergeOptions valueOf(FastForwardMode ffMode) { + switch (ffMode) { + case NO_FF: + return __NO_FF; + case FF_ONLY: + return __FF_ONLY; + default: + return __FF; + } + } + } + + /** + * The modes available for fast forward merges corresponding to the + * options under merge.ff config option. + */ + public enum Merge { + /** + * {@link FastForwardMode#FF}. + */ + TRUE, + /** + * {@link FastForwardMode#NO_FF}. + */ + FALSE, + /** + * {@link FastForwardMode#FF_ONLY}. + */ + ONLY; + + /** + * Map from FastForwardMode to + * FastForwardMode.Merge. + * + * @param ffMode + * the FastForwardMode value to be mapped + * @return the mapped code>FastForwardMode.Merge value + */ + public static Merge valueOf(FastForwardMode ffMode) { + switch (ffMode) { + case NO_FF: + return FALSE; + case FF_ONLY: + return ONLY; + default: + return TRUE; + } + } + } + + /** + * Map from FastForwardMode.Merge to + * FastForwardMode. + * + * @param ffMode + * the FastForwardMode.Merge value to be mapped + * @return the mapped code>FastForwardMode value + */ + public static FastForwardMode valueOf(FastForwardMode.Merge ffMode) { + switch (ffMode) { + case FALSE: + return NO_FF; + case ONLY: + return FF_ONLY; + default: + return FF; + } + } + + /** + * Map from FastForwardMode.MergeOptions to + * FastForwardMode. + * + * @param ffMode + * the FastForwardMode.MergeOptions value to be + * mapped + * @return the mapped code>FastForwardMode value + */ + public static FastForwardMode valueOf( + FastForwardMode.MergeOptions ffMode) { + switch (ffMode) { + case __NO_FF: + return NO_FF; + case __FF_ONLY: + return FF_ONLY; + default: + return FF; + } + } } /** diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java index 84d77ce32..348e1175d 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java @@ -387,7 +387,7 @@ public class Config { if (value == null) return defaultValue; - String n = value.replace(' ', '_'); + String n = value.replace('-', '_'); T trueState = null; T falseState = null; for (T e : all) { @@ -720,7 +720,7 @@ public class Config { */ public > void setEnum(final String section, final String subsection, final String name, final T value) { - String n = value.name().toLowerCase().replace('_', ' '); + String n = value.name().toLowerCase().replace('_', '-'); setString(section, subsection, name, n); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java index dbaa043e2..8fd84c893 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java @@ -191,4 +191,7 @@ public class ConfigConstants { /** The "mergeoptions" key */ public static final String CONFIG_KEY_MERGEOPTIONS = "mergeoptions"; + + /** The "ff" key */ + public static final String CONFIG_KEY_FF = "ff"; }