From b7b0e966cc7e872a015cc081033e7b83611efe19 Mon Sep 17 00:00:00 2001 From: Marsel Safin <179933638+marcelsafin@users.noreply.github.com> Date: Wed, 29 Jul 2026 15:43:03 +0200 Subject: [PATCH] fix(integrations): preserve non-UTF-8 VS Code settings (#3833) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/specify_cli/integrations/copilot/__init__.py | 2 +- tests/integrations/test_integration_copilot.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/specify_cli/integrations/copilot/__init__.py b/src/specify_cli/integrations/copilot/__init__.py index 17563dcb6..e6f86e899 100644 --- a/src/specify_cli/integrations/copilot/__init__.py +++ b/src/specify_cli/integrations/copilot/__init__.py @@ -525,7 +525,7 @@ class CopilotIntegration(IntegrationBase): """ try: existing = json.loads(dst.read_text(encoding="utf-8")) - except (json.JSONDecodeError, OSError): + except (json.JSONDecodeError, UnicodeDecodeError, OSError): # Cannot parse existing file (likely JSONC with comments). # Skip merge to preserve the user's settings, but show # what they should add manually. diff --git a/tests/integrations/test_integration_copilot.py b/tests/integrations/test_integration_copilot.py index ccd187f2f..647425097 100644 --- a/tests/integrations/test_integration_copilot.py +++ b/tests/integrations/test_integration_copilot.py @@ -109,6 +109,21 @@ class TestCopilotIntegration: assert settings not in created assert not any("settings.json" in k for k in m.files) + def test_setup_preserves_non_utf8_vscode_settings(self, tmp_path, caplog): + from specify_cli.integrations.copilot import CopilotIntegration + copilot = CopilotIntegration() + vscode_dir = tmp_path / ".vscode" + vscode_dir.mkdir(parents=True) + settings = vscode_dir / "settings.json" + original = b'{"editor.fontSize": 14}\xff' + settings.write_bytes(original) + m = IntegrationManifest("copilot", tmp_path) + + copilot.setup(tmp_path, m) + + assert settings.read_bytes() == original + assert "Could not parse" in caplog.text + def test_all_created_files_tracked_in_manifest(self, tmp_path): from specify_cli.integrations.copilot import CopilotIntegration copilot = CopilotIntegration()