Parcourir la source

Add support for escaping config values.

Jelmer Vernooij il y a 13 ans
Parent
commit
087d13fd4f
2 fichiers modifiés avec 14 ajouts et 0 suppressions
  1. 5 0
      dulwich/config.py
  2. 9 0
      dulwich/tests/test_config.py

+ 5 - 0
dulwich/config.py

@@ -108,6 +108,11 @@ def _unescape_value(value):
     return re.sub(r"(\\.)", unescape, value)
     return re.sub(r"(\\.)", unescape, value)
 
 
 
 
+def _escape_value(value):
+    """Escape a value."""
+    return value.replace("\n", "\\n").replace("\t", "\\t").replace("\"", "\\\"").replace("\\", "\\\\")
+
+
 class ConfigFile(ConfigDict):
 class ConfigFile(ConfigDict):
     """A Git configuration file, like .git/config or ~/.gitconfig.
     """A Git configuration file, like .git/config or ~/.gitconfig.
     """
     """

+ 9 - 0
dulwich/tests/test_config.py

@@ -23,6 +23,7 @@ from dulwich.config import (
     ConfigDict,
     ConfigDict,
     ConfigFile,
     ConfigFile,
     StackedConfig,
     StackedConfig,
+    _escape_value,
     _unescape_value,
     _unescape_value,
     )
     )
 from dulwich.tests import TestCase
 from dulwich.tests import TestCase
@@ -75,3 +76,11 @@ class UnescapeTests(TestCase):
     def test_quote(self):
     def test_quote(self):
         self.assertEquals("\"foo\"", _unescape_value("\\\"foo\\\""))
         self.assertEquals("\"foo\"", _unescape_value("\\\"foo\\\""))
 
 
+
+class EscapeTests(TestCase):
+
+    def test_nothing(self):
+        self.assertEquals("foo", _escape_value("foo"))
+
+    def test_backslash(self):
+        self.assertEquals("foo\\\\", _escape_value("foo\\"))