diff --git a/git_config.py b/git_config.py index a5b5b4d9..e658b059 100644 --- a/git_config.py +++ b/git_config.py @@ -259,21 +259,26 @@ class GitConfig(object): 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 00000000..3c573c9e --- /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 00000000..d67a8bab --- /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()