Make section names and variable names case insensitive.
authorJelmer Vernooij <jelmer@samba.org>
Wed, 28 Dec 2011 18:35:12 +0000 (19:35 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Wed, 28 Dec 2011 18:35:12 +0000 (19:35 +0100)
dulwich/config.py
dulwich/tests/test_config.py

index 7e43dd92c1aa8dc84960612cf356afa4b91f5e4e..969bb24061fee39755cd3d5c22340bd9ca875339 100644 (file)
 
 """Reading and writing Git configuration files.
 
+TODO:
+ * preserve formatting when updating configuration files
+ * treat subsection names as case-insensitive for [branch.foo] style
+   subsections
 """
 
 import errno
@@ -193,6 +197,7 @@ class ConfigFile(ConfigDict):
                         raise ValueError("expected trailing ]")
                     key = line.strip()
                     pts = key[1:-1].split(" ", 1)
+                    pts[0] = pts[0].lower()
                     if len(pts) == 2:
                         if pts[1][0] != "\"" or pts[1][-1] != "\"":
                             raise ValueError(
@@ -221,7 +226,7 @@ class ConfigFile(ConfigDict):
                     except ValueError:
                         setting = line
                         value = "true"
-                    setting = setting.strip()
+                    setting = setting.strip().lower()
                     if not _check_variable_name(setting):
                         raise ValueError("invalid variable name %s" % setting)
                     if value.endswith("\\\n"):
index a2a099e6921f564fb6139725fe15bfe16163eed4..73a871b7b227ea4657d09a02054ba83c128d6016 100644 (file)
@@ -69,6 +69,11 @@ class ConfigFileTests(TestCase):
         self.assertEquals("bar", cf.get(("core", ), "foo"))
         self.assertEquals("bar", cf.get(("core", "foo"), "foo"))
 
+    def test_from_file_section_case_insensitive(self):
+        cf = self.from_file("[cOre]\nfOo = bar\n")
+        self.assertEquals("bar", cf.get(("core", ), "foo"))
+        self.assertEquals("bar", cf.get(("core", "foo"), "foo"))
+
     def test_from_file_with_mixed_quoted(self):
         cf = self.from_file("[core]\nfoo = \"bar\"la\n")
         self.assertEquals("barla", cf.get(("core", ), "foo"))