{"thread":{"id":"14698","subject":"[JGIT PATCH 2/2] Extended test cases for RepositoryConfigTest","startedAt":"2008-07-27T02:11:55Z","lastAt":"2008-07-27T02:11:56Z","messageCount":2,"participants":["Shawn O. Pearce"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"85132","messageId":"1217124716-12063-1-git-send-email-spearce@spearce.org","threadId":"14698","inReplyTo":null,"subject":"[JGIT PATCH 1/2] Fix RepositoryConfig.setStringList to not corrupt internal state","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-07-27T02:11:55Z","receivedAt":"2008-07-27T02:11:55Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"Calling setStringList was incorrectly storing the String objects\ndirectly in byName.  The byName table should have either an Entry or\na List<Entry> stored within its value position.  Storing the String\n(or List<String>) directly confused our get code as it did not find\nthe object type it expected.  This caused the get code to fallback\nto the base configuration (e.g. ~/.gitconfig) or just return null\n(claiming the value was never set).\n\nA test case for this appears in the next commit.\n\nNoticed-by: Marek Zawirski <marek.zawirski@gmail.com>\nSigned-off-by: Shawn O. Pearce <spearce@spearce.org>\n---\n .../src/org/spearce/jgit/lib/RepositoryConfig.java |   23 ++++++++++++++++---\n 1 files changed, 19 insertions(+), 4 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java\nindex 1431f1f..d1cd5fc 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RepositoryConfig.java\n@@ -381,10 +381,25 @@ public class RepositoryConfig {\n \t\tkey += \".\" + name.toLowerCase();\n \t\tif (values.size() == 0)\n \t\t\tbyName.remove(key);\n-\t\telse if (values.size() == 1)\n-\t\t\tbyName.put(key, values.get(0));\n-\t\telse\n-\t\t\tbyName.put(key, new ArrayList<String>(values));\n+\t\telse if (values.size() == 1) {\n+\t\t\tfinal Entry e = new Entry();\n+\t\t\te.base = section;\n+\t\t\te.extendedBase = subsection;\n+\t\t\te.name = name;\n+\t\t\te.value = values.get(0);\n+\t\t\tbyName.put(key, e);\n+\t\t} else {\n+\t\t\tfinal ArrayList<Entry> eList = new ArrayList<Entry>(values.size());\n+\t\t\tfor (final String v : values) {\n+\t\t\t\tfinal Entry e = new Entry();\n+\t\t\t\te.base = section;\n+\t\t\t\te.extendedBase = subsection;\n+\t\t\t\te.name = name;\n+\t\t\t\te.value = v;\n+\t\t\t\teList.add(e);\n+\t\t\t}\n+\t\t\tbyName.put(key, eList);\n+\t\t}\n \n \t\tint entryIndex = 0;\n \t\tint valueIndex = 0;\n-- \n1.6.0.rc0.182.gb96c7\n"},{"id":"85131","messageId":"1217124716-12063-2-git-send-email-spearce@spearce.org","threadId":"14698","inReplyTo":"1217124716-12063-1-git-send-email-spearce@spearce.org","subject":"[JGIT PATCH 2/2] Extended test cases for RepositoryConfigTest","fromName":"Shawn O. Pearce","fromEmail":"spearce@spearce.org","sentAt":"2008-07-27T02:11:56Z","receivedAt":"2008-07-27T02:11:56Z","isPatch":true,"sender":{"key":"spearce@spearce.org","avatar":"https://avatars.githubusercontent.com/u/34844?v=4"},"body":"From: Marek Zawirski <marek.zawirski@gmail.com>\n\nAdd cases for getting values after setting them. It's something\ndifferent from reading config file from scratch or writing it out after\nmodifications. It's case for getting values after modifications in\nobject model.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\nSigned-off-by: Shawn O. Pearce <spearce@spearce.org>\n---\n .../org/spearce/jgit/lib/RepositoryConfigTest.java |   20 +++++++++++++++++++-\n 1 files changed, 19 insertions(+), 1 deletions(-)\n\ndiff --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\nindex 8c55fe8..da7e704 100644\n--- a/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java\n+++ b/org.spearce.jgit.test/tst/org/spearce/jgit/lib/RepositoryConfigTest.java\n@@ -2,6 +2,7 @@\n  * Copyright (C) 2007, Dave Watson <dwatson@mimvista.com>\n  * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com>\n  * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>\n+ * Copyright (C) 2008, Marek Zawirski <marek.zawirski@gmail.com>\n  *\n  * All rights reserved.\n  *\n@@ -41,6 +42,8 @@ package org.spearce.jgit.lib;\n \n import java.io.File;\n import java.io.IOException;\n+import java.util.Arrays;\n+import java.util.LinkedList;\n \n /**\n  * Test reading of git config\n@@ -84,11 +87,26 @@ public class RepositoryConfigTest extends RepositoryTestCase {\n \t\tcheckFile(cfgFile, \"[sec \\\"ext\\\"]\\n\\tname = value\\n\\tname2 = value2\\n\");\n \t}\n \n-\tpublic void test004_PutSimple() throws IOException {\n+\tpublic void test004_PutGetSimple() throws IOException {\n \t\tFile cfgFile = writeTrashFile(\"config_004\", \"\");\n \t\tRepositoryConfig repositoryConfig = new RepositoryConfig(null, cfgFile);\n \t\trepositoryConfig.setString(\"my\", null, \"somename\", \"false\");\n \t\trepositoryConfig.save();\n \t\tcheckFile(cfgFile, \"[my]\\n\\tsomename = false\\n\");\n+\t\tassertEquals(\"false\", repositoryConfig\n+\t\t\t\t.getString(\"my\", null, \"somename\"));\n+\t}\n+\n+\tpublic void test005_PutGetStringList() throws IOException {\n+\t\tFile cfgFile = writeTrashFile(\"config_005\", \"\");\n+\t\tRepositoryConfig repositoryConfig = new RepositoryConfig(null, cfgFile);\n+\t\tfinal LinkedList<String> values = new LinkedList<String>();\n+\t\tvalues.add(\"value1\");\n+\t\tvalues.add(\"value2\");\n+\t\trepositoryConfig.setStringList(\"my\", null, \"somename\", values);\n+\t\trepositoryConfig.save();\n+\t\tassertTrue(Arrays.equals(values.toArray(), repositoryConfig\n+\t\t\t\t.getStringList(\"my\", null, \"somename\")));\n+\t\tcheckFile(cfgFile, \"[my]\\n\\tsomename = value1\\n\\tsomename = value2\\n\");\n \t}\n }\n-- \n1.6.0.rc0.182.gb96c7\n"}]}