Avoid double quotes in Git Config
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>
This commit is contained in:
parent
6a05904e53
commit
2941d23e7e
|
@ -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 @@
|
|||
/**
|
||||
* 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 void test010_readNamesInSubSection() throws ConfigInvalidException {
|
|||
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));
|
||||
}
|
|
@ -834,9 +834,15 @@ public String toText() {
|
|||
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) {
|
||||
|
|
Loading…
Reference in New Issue