git_config: handle configuration entries with no values
A git-config entry with no value was preventing repo
from initializing. This modifies _ReadGit() to handle
config entries with empty values.
Signed-off-by: David Aguilar <davvid@gmail.com>
Reported-by: Josh Guilfoyle <jasta00@gmail.com>
diff --git a/git_config.py b/git_config.py
index a5b5b4d..e658b05 100644
--- a/git_config.py
+++ b/git_config.py
@@ -259,21 +259,26 @@
os.remove(self._pickle)
def _ReadGit(self):
- d = self._do('--null', '--list')
- c = {}
- while d:
- lf = d.index('\n')
- nul = d.index('\0', lf + 1)
+ """
+ Read configuration data from git.
- key = _key(d[0:lf])
- val = d[lf + 1:nul]
+ This internal method populates the GitConfig cache.
+
+ """
+ d = self._do('--null', '--list').rstrip('\0')
+ c = {}
+ for line in d.split('\0'):
+ if '\n' in line:
+ key, val = line.split('\n', 1)
+ else:
+ key = line
+ val = None
if key in c:
c[key].append(val)
else:
c[key] = [val]
- d = d[nul + 1:]
return c
def _do(self, *args):
diff --git a/tests/fixtures/test.gitconfig b/tests/fixtures/test.gitconfig
new file mode 100644
index 0000000..3c573c9
--- /dev/null
+++ b/tests/fixtures/test.gitconfig
@@ -0,0 +1,3 @@
+[section]
+ empty
+ nonempty = true
diff --git a/tests/test_git_config.py b/tests/test_git_config.py
new file mode 100644
index 0000000..d67a8ba
--- /dev/null
+++ b/tests/test_git_config.py
@@ -0,0 +1,43 @@
+import os
+import unittest
+
+import git_config
+
+def fixture(*paths):
+ """Return a path relative to test/fixtures.
+ """
+ return os.path.join(os.path.dirname(__file__), 'fixtures', *paths)
+
+class GitConfigUnitTest(unittest.TestCase):
+ """Tests the GitConfig class.
+ """
+ def setUp(self):
+ """Create a GitConfig object using the test.gitconfig fixture.
+ """
+ config_fixture = fixture('test.gitconfig')
+ self.config = git_config.GitConfig(config_fixture)
+
+ def test_GetString_with_empty_config_values(self):
+ """
+ Test config entries with no value.
+
+ [section]
+ empty
+
+ """
+ val = self.config.GetString('section.empty')
+ self.assertEqual(val, None)
+
+ def test_GetString_with_true_value(self):
+ """
+ Test config entries with a string value.
+
+ [section]
+ nonempty = true
+
+ """
+ val = self.config.GetString('section.nonempty')
+ self.assertEqual(val, 'true')
+
+if __name__ == '__main__':
+ unittest.main()