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)