Calling setStringList was incorrectly storing the String objects directly in byName. The byName table should have either an Entry or a List<Entry> stored within its value position. Storing the String (or List<String>) directly confused our get code as it did not find the object type it expected. This caused the get code to fallback to the base configuration (e.g. ~/.gitconfig) or just return null (claiming the value was never set). A test case for this appears in the next commit. Noticed-by: Marek Zawirski <marek.zawirski@xxxxxxxxx> Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- .../src/org/spearce/jgit/lib/RepositoryConfig.java | 23 ++++++++++++++++--- 1 files changed, 19 insertions(+), 4 deletions(-) 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 1431f1f..d1cd5fc 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java @@ -381,10 +381,25 @@ public class RepositoryConfig { key += "." + name.toLowerCase(); if (values.size() == 0) byName.remove(key); - else if (values.size() == 1) - byName.put(key, values.get(0)); - else - byName.put(key, new ArrayList<String>(values)); + else if (values.size() == 1) { + final Entry e = new Entry(); + e.base = section; + e.extendedBase = subsection; + e.name = name; + e.value = values.get(0); + byName.put(key, e); + } else { + final ArrayList<Entry> eList = new ArrayList<Entry>(values.size()); + for (final String v : values) { + final Entry e = new Entry(); + e.base = section; + e.extendedBase = subsection; + e.name = name; + e.value = v; + eList.add(e); + } + byName.put(key, eList); + } int entryIndex = 0; int valueIndex = 0; -- 1.6.0.rc0.182.gb96c7 -- 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