aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathias Kinzler2010-09-01 03:13:19 (EDT)
committerMathias Kinzler2010-09-01 03:13:19 (EDT)
commit2941d23e7ebaa524e7d9efbaf69565a57042d048 (patch)
tree1f2cbaa839f6fb49abc38a2bc2b1418449f9f92e
parent6a05904e53bb60f96c344db33016b66f170cb9f0 (diff)
downloadjgit-2941d23e7ebaa524e7d9efbaf69565a57042d048.zip
jgit-2941d23e7ebaa524e7d9efbaf69565a57042d048.tar.gz
jgit-2941d23e7ebaa524e7d9efbaf69565a57042d048.tar.bz2
Avoid double quotes in Git Configrefs/changes/52/1452/5
Currently, if a branch is created that has special chars ('#' in the bug), Config will surround the subsection name with double quotes during it's toText method which will result in an invalid file after saving the Config. Bug: 318249 Change-Id: I0a642f52def42d936869e4aaaeb6999567901001 Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java (renamed from org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryConfigTest.java)26
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java12
2 files changed, 34 insertions, 4 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryConfigTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java
index 860d0d6..e12e869 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryConfigTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java
@@ -4,6 +4,7 @@
* Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>
* Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>
* Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
+ * Copyright (C) 2010, Mathias Kinzler <mathias.kinzler@sap.com>
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
@@ -47,6 +48,7 @@
package org.eclipse.jgit.lib;
+import java.text.MessageFormat;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Set;
@@ -61,7 +63,7 @@ import org.eclipse.jgit.util.SystemReader;
/**
* Test reading of git config
*/
-public class RepositoryConfigTest extends TestCase {
+public class ConfigTest extends TestCase {
public void test001_ReadBareKey() throws ConfigInvalidException {
final Config c = parse("[foo]\nbar\n");
assertEquals(true, c.getBoolean("foo", null, "bar", false));
@@ -351,6 +353,28 @@ public class RepositoryConfigTest extends TestCase {
assertTrue("Subsection should contain \"b\"", names.contains("b"));
}
+ public void testQuotingForSubSectionNames() {
+ String resultPattern = "[testsection \"{0}\"]\n\ttestname = testvalue\n";
+ String result;
+
+ Config config = new Config();
+ config.setString("testsection", "testsubsection", "testname",
+ "testvalue");
+
+ result = MessageFormat.format(resultPattern, "testsubsection");
+ assertEquals(result, config.toText());
+ config.clear();
+
+ config.setString("testsection", "#quotable", "testname", "testvalue");
+ result = MessageFormat.format(resultPattern, "#quotable");
+ assertEquals(result, config.toText());
+ config.clear();
+
+ config.setString("testsection", "with\"quote", "testname", "testvalue");
+ result = MessageFormat.format(resultPattern, "with\\\"quote");
+ assertEquals(result, config.toText());
+ }
+
private void assertReadLong(long exp) throws ConfigInvalidException {
assertReadLong(exp, String.valueOf(exp));
}
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 335cada..884f498 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java
@@ -834,9 +834,15 @@ public class Config {
out.append(e.section);
if (e.subsection != null) {
out.append(' ');
- out.append('"');
- out.append(escapeValue(e.subsection));
- out.append('"');
+ String escaped = escapeValue(e.subsection);
+ // make sure to avoid double quotes here
+ boolean quoted = escaped.startsWith("\"")
+ && escaped.endsWith("\"");
+ if (!quoted)
+ out.append('"');
+ out.append(escaped);
+ if (!quoted)
+ out.append('"');
}
out.append(']');
} else if (e.section != null && e.name != null) {