diff options
author | Robin Rosenberg <robin.rosenberg@dewire.com> | 2013-01-08 06:25:27 -0500 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org <gerrit@eclipse.org> | 2013-01-08 06:25:27 -0500 |
commit | 3328f45dde327cf344bed2aa34838b777e0dd5b8 (patch) | |
tree | 39e3a6a44a4e409e19780acd94c3f7807236f754 | |
parent | 9e36b173a5fc2bab683416c5c0b7d9d4008d7f99 (diff) | |
parent | c98abc9c0586c73ef7df4172644b7dd21c979e9d (diff) | |
download | jgit-3328f45dde327cf344bed2aa34838b777e0dd5b8.tar.gz jgit-3328f45dde327cf344bed2aa34838b777e0dd5b8.zip |
Merge "Add additional FastForwardMode enums for different config contexts"
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 e675609290..f02012eb5a 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 04d91af4b0..118e378ce5 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<MergeResult> { * forward). */ FF_ONLY; + + /** + * The modes available for fast forward merges corresponding to the + * options under branch.<name>.branch config option. + */ + public enum MergeOptions { + /** + * {@link FastForwardMode#FF}. + */ + __FF, + /** + * {@link FastForwardMode#NO_FF}. + */ + __NO_FF, + /** + * {@link FastForwardMode#FF_ONLY}. + */ + __FF_ONLY; + + /** + * Map from <code>FastForwardMode</code> to + * <code>FastForwardMode.MergeOptions</code>. + * + * @param ffMode + * the <code>FastForwardMode</code> value to be mapped + * @return the mapped code>FastForwardMode.MergeOptions</code> 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 <code>FastForwardMode</code> to + * <code>FastForwardMode.Merge</code>. + * + * @param ffMode + * the <code>FastForwardMode</code> value to be mapped + * @return the mapped code>FastForwardMode.Merge</code> value + */ + public static Merge valueOf(FastForwardMode ffMode) { + switch (ffMode) { + case NO_FF: + return FALSE; + case FF_ONLY: + return ONLY; + default: + return TRUE; + } + } + } + + /** + * Map from <code>FastForwardMode.Merge</code> to + * <code>FastForwardMode</code>. + * + * @param ffMode + * the <code>FastForwardMode.Merge</code> value to be mapped + * @return the mapped code>FastForwardMode</code> 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 <code>FastForwardMode.MergeOptions</code> to + * <code>FastForwardMode</code>. + * + * @param ffMode + * the <code>FastForwardMode.MergeOptions</code> value to be + * mapped + * @return the mapped code>FastForwardMode</code> 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 84d77ce32b..348e1175d9 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 <T extends Enum<?>> 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 dbaa043e21..8fd84c8938 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"; } |