In 8f8c6fafd92f (shipped in 1.6.3) Linus taught C Git how to read boolean configuration values set to "yes" as true and "no" as false. Add support for these values, and some test cases. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- This little 2 patch series is to adjust some cases in JGit to match Git 1.6.3 semantics. .../org/spearce/jgit/lib/RepositoryConfigTest.java | 70 ++++++++++++++++++-- .../src/org/spearce/jgit/lib/RepositoryConfig.java | 13 +++- 2 files changed, 74 insertions(+), 9 deletions(-) diff --git a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java index 4b5314c..ed573e1 100644 --- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java +++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java @@ -57,9 +57,7 @@ * @throws IOException */ public void test001_ReadBareKey() throws IOException { - final File path = writeTrashFile("config_001", "[foo]\nbar\n"); - RepositoryConfig repositoryConfig = new RepositoryConfig(null, path); - System.out.println(repositoryConfig.getString("foo", null, "bar")); + final RepositoryConfig repositoryConfig = read("[foo]\nbar\n"); assertEquals(true, repositoryConfig.getBoolean("foo", null, "bar", false)); assertEquals("", repositoryConfig.getString("foo", null, "bar")); } @@ -70,8 +68,7 @@ public void test001_ReadBareKey() throws IOException { * @throws IOException */ public void test002_ReadWithSubsection() throws IOException { - final File path = writeTrashFile("config_002", "[foo \"zip\"]\nbar\n[foo \"zap\"]\nbar=false\nn=3\n"); - RepositoryConfig repositoryConfig = new RepositoryConfig(null, path); + final RepositoryConfig repositoryConfig = read("[foo \"zip\"]\nbar\n[foo \"zap\"]\nbar=false\nn=3\n"); assertEquals(true, repositoryConfig.getBoolean("foo", "zip", "bar", false)); assertEquals("", repositoryConfig.getString("foo","zip", "bar")); assertEquals(false, repositoryConfig.getBoolean("foo", "zap", "bar", true)); @@ -113,8 +110,7 @@ assertTrue(Arrays.equals(values.toArray(), repositoryConfig } public void test006_readCaseInsensitive() throws IOException { - final File path = writeTrashFile("config_001", "[Foo]\nBar\n"); - RepositoryConfig repositoryConfig = new RepositoryConfig(null, path); + final RepositoryConfig repositoryConfig = read("[Foo]\nBar\n"); assertEquals(true, repositoryConfig.getBoolean("foo", null, "bar", false)); assertEquals("", repositoryConfig.getString("foo", null, "bar")); } @@ -182,4 +178,64 @@ public void test007_readUserInfos() throws IOException { assertEquals("local username", authorName); assertEquals("author@localemail", authorEmail); } + + public void testReadBoolean_TrueFalse1() throws IOException { + final RepositoryConfig c = read("[s]\na = true\nb = false\n"); + assertEquals("true", c.getString("s", null, "a")); + assertEquals("false", c.getString("s", null, "b")); + + assertTrue(c.getBoolean("s", "a", false)); + assertFalse(c.getBoolean("s", "b", true)); + } + + public void testReadBoolean_TrueFalse2() throws IOException { + final RepositoryConfig c = read("[s]\na = TrUe\nb = fAlSe\n"); + assertEquals("TrUe", c.getString("s", null, "a")); + assertEquals("fAlSe", c.getString("s", null, "b")); + + assertTrue(c.getBoolean("s", "a", false)); + assertFalse(c.getBoolean("s", "b", true)); + } + + public void testReadBoolean_YesNo1() throws IOException { + final RepositoryConfig c = read("[s]\na = yes\nb = no\n"); + assertEquals("yes", c.getString("s", null, "a")); + assertEquals("no", c.getString("s", null, "b")); + + assertTrue(c.getBoolean("s", "a", false)); + assertFalse(c.getBoolean("s", "b", true)); + } + + public void testReadBoolean_YesNo2() throws IOException { + final RepositoryConfig c = read("[s]\na = yEs\nb = NO\n"); + assertEquals("yEs", c.getString("s", null, "a")); + assertEquals("NO", c.getString("s", null, "b")); + + assertTrue(c.getBoolean("s", "a", false)); + assertFalse(c.getBoolean("s", "b", true)); + } + + public void testReadBoolean_OnOff1() throws IOException { + final RepositoryConfig c = read("[s]\na = on\nb = off\n"); + assertEquals("on", c.getString("s", null, "a")); + assertEquals("off", c.getString("s", null, "b")); + + assertTrue(c.getBoolean("s", "a", false)); + assertFalse(c.getBoolean("s", "b", true)); + } + + public void testReadBoolean_OnOff2() throws IOException { + final RepositoryConfig c = read("[s]\na = ON\nb = OFF\n"); + assertEquals("ON", c.getString("s", null, "a")); + assertEquals("OFF", c.getString("s", null, "b")); + + assertTrue(c.getBoolean("s", "a", false)); + assertFalse(c.getBoolean("s", "b", true)); + } + + private RepositoryConfig read(final String content) throws IOException { + final File p = writeTrashFile(getName() + ".config", content); + final RepositoryConfig c = new RepositoryConfig(null, p); + return c; + } } diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java index cb287ee..e3a303f 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java @@ -254,10 +254,19 @@ public boolean getBoolean(final String section, String subsection, return defaultValue; n = n.toLowerCase(); - if (MAGIC_EMPTY_VALUE.equals(n) || "yes".equalsIgnoreCase(n) || "true".equalsIgnoreCase(n) || "1".equals(n)) { + if (MAGIC_EMPTY_VALUE.equals(n) + || "yes".equalsIgnoreCase(n) + || "true".equalsIgnoreCase(n) + || "1".equals(n) + || "on".equals(n)) { return true; - } else if ("no".equalsIgnoreCase(n) || "false".equalsIgnoreCase(n) || "0".equalsIgnoreCase(n)) { + + } else if ("no".equalsIgnoreCase(n) + || "false".equalsIgnoreCase(n) + || "0".equalsIgnoreCase(n) + || "off".equalsIgnoreCase(n)) { return false; + } else { throw new IllegalArgumentException("Invalid boolean value: " + section + "." + name + "=" + n); -- 1.6.3.195.gad81 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html