From 73823c878e0f9d498d161cde47e2a9a05d26da57 Mon Sep 17 00:00:00 2001 From: Nacho Mata Date: Thu, 11 Jun 2026 13:41:12 +0200 Subject: [PATCH] fix(windows): detect per-user Git for Windows bash under %LocalAppData%\Programs\Git (#3738) find_bash() rejected the WindowsApps WSL stub and then probed only %LocalAppData%\Git, so per-user Git for Windows installs (winget / Inno Setup {userpf}) under %LocalAppData%\Programs\Git were never found and the Cookbook reported "needs Git Bash" despite Git being installed. Add the Programs\Git subfolder to the LocalAppData fallback root. --- core/platform_compat.py | 2 ++ tests/test_platform_compat.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/core/platform_compat.py b/core/platform_compat.py index b3b157111..1a927702b 100644 --- a/core/platform_compat.py +++ b/core/platform_compat.py @@ -191,6 +191,8 @@ def _windows_bash_fallbacks() -> List[str]: base = os.environ.get(env_name) if base: roots.append(ntpath.join(base, "Git")) + if env_name == "LocalAppData": + roots.append(ntpath.join(base, "Programs", "Git")) roots.extend(_WINDOWS_BASH_DEFAULT_ROOTS) paths: List[str] = [] diff --git a/tests/test_platform_compat.py b/tests/test_platform_compat.py index 2c45b9ce0..2d8c211c0 100644 --- a/tests/test_platform_compat.py +++ b/tests/test_platform_compat.py @@ -47,6 +47,20 @@ def test_find_bash_checks_local_app_data_git_install(monkeypatch): assert platform_compat.find_bash() == expected +def test_find_bash_checks_local_app_data_programs_git_install(monkeypatch): + _reset_bash_cache(monkeypatch) + monkeypatch.setattr(platform_compat, "IS_WINDOWS", True) + monkeypatch.setattr(platform_compat.shutil, "which", lambda _name: None) + for env_name in platform_compat._WINDOWS_BASH_ROOT_ENV_VARS: + monkeypatch.delenv(env_name, raising=False) + monkeypatch.setenv("LocalAppData", r"C:\Users\alice\AppData\Local") + + expected = r"C:\Users\alice\AppData\Local\Programs\Git\bin\bash.exe" + monkeypatch.setattr(platform_compat.os.path, "exists", lambda path: path == expected) + + assert platform_compat.find_bash() == expected + + def test_find_bash_skips_windows_wsl_stub(monkeypatch): _reset_bash_cache(monkeypatch) monkeypatch.setattr(platform_compat, "IS_WINDOWS", True)