From cfc613a866921dab9228d5c21587e62f30ec6a57 Mon Sep 17 00:00:00 2001 From: Kent Friesen Date: Tue, 10 Jan 2023 11:02:38 -0800 Subject: [PATCH 1/2] get_values eagerly loads sections before return --- git/config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/git/config.py b/git/config.py index 71d7ea689..e05a297af 100644 --- a/git/config.py +++ b/git/config.py @@ -796,6 +796,7 @@ def get_values( :raise TypeError: in case the value could not be understood Otherwise the exceptions known to the ConfigParser will be raised.""" try: + self.sections() lst = self._sections[section].getall(option) except Exception: if default is not None: From fc843d31ddb817deb8e5e6732ebe67a5ee61db66 Mon Sep 17 00:00:00 2001 From: Cody Martin Date: Wed, 15 Feb 2023 22:07:56 -0700 Subject: [PATCH 2/2] Add test asserting that get_values works by itself As described in #1534, this test will fail in main with a KeyError about a missing section name even though the named sections do exist within the config file. This test will pass in the branch associated with #1535. This test should keep the improved behavior healthy as the code evolves by preventing future developers from removing the eager loading of sections within get_values(). --- test/test_config.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/test_config.py b/test/test_config.py index 8bb2aa306..b159ebe2d 100644 --- a/test/test_config.py +++ b/test/test_config.py @@ -398,6 +398,17 @@ def test_empty_config_value(self): with self.assertRaises(cp.NoOptionError): cr.get_value("color", "ui") + def test_get_values_works_without_requiring_any_other_calls_first(self): + file_obj = self._to_memcache(fixture_path("git_config_multiple")) + cr = GitConfigParser(file_obj, read_only=True) + self.assertEqual(cr.get_values("section0", "option0"), ["value0"]) + file_obj.seek(0) + cr = GitConfigParser(file_obj, read_only=True) + self.assertEqual(cr.get_values("section1", "option1"), ["value1a", "value1b"]) + file_obj.seek(0) + cr = GitConfigParser(file_obj, read_only=True) + self.assertEqual(cr.get_values("section1", "other_option1"), ["other_value1"]) + def test_multiple_values(self): file_obj = self._to_memcache(fixture_path("git_config_multiple")) with GitConfigParser(file_obj, read_only=False) as cw: