From ca2e25ad393bb25c9a4d81918e8612fd6354de51 Mon Sep 17 00:00:00 2001 From: Will Shanks Date: Mon, 22 Apr 2024 18:02:02 -0400 Subject: [PATCH] Handle alternate case for worktreeconfig setting `extensions.worktreeconfig` was checked in a way that was not case-insensitive, but git config settings should be case insensitive. This behavior led to problems since the documentation describes the setting as `worktreeConfig` and GitHub Actions started setting the option with this casing. Fixes https://github.com/jelmer/dulwich/issues/1285 --- dulwich/repo.py | 2 +- tests/test_repository.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/dulwich/repo.py b/dulwich/repo.py index d87c93382..b564a0e4c 100644 --- a/dulwich/repo.py +++ b/dulwich/repo.py @@ -1191,7 +1191,7 @@ def __init__( raise UnsupportedVersion(format_version) for extension, _value in config.items((b"extensions",)): - if extension not in (b"worktreeconfig",): + if extension.lower() not in (b"worktreeconfig",): raise UnsupportedExtension(extension) if object_store is None: diff --git a/tests/test_repository.py b/tests/test_repository.py index a063c4576..d0b7c7705 100644 --- a/tests/test_repository.py +++ b/tests/test_repository.py @@ -1142,6 +1142,22 @@ def test_worktreeconfig_extension(self): cs = r.get_config_stack() self.assertEqual(cs.get(("user",), "name"), b"Jelmer") + def test_worktreeconfig_extension_case(self): + """Test that worktree code does not error for alternate case format""" + r = self._repo + c = r.get_config() + c.set(("core",), "repositoryformatversion", "1") + # Capitalize "Config" + c.set(("extensions",), "worktreeConfig", True) + c.write_to_path() + c = r.get_worktree_config() + c.set(("user",), "repositoryformatversion", "1") + c.set((b"user",), b"name", b"Jelmer") + c.write_to_path() + # The following line errored before + # https://github.com/jelmer/dulwich/issues/1285 was addressed + Repo(self._repo_dir) + def test_repositoryformatversion_1_extension(self): r = self._repo c = r.get_config()