fix(windows): align launcher Find-GitBash with runtime bash detection (#3742)

Find-GitBash accepted the Microsoft Store / WSL bash.exe alias and only probed <root>\Git, so it never detected per-user Git for Windows installs under %LocalAppData%\Programs\Git and could skip the launcher's "install Git Bash" note even when no usable Git Bash was present.

Reject the WSL stub (system32/sysnative/windowsapps) and also probe %LocalAppData%\Programs\Git, mirroring core/platform_compat.find_bash.

Refs #3740
This commit is contained in:
Nacho Mata
2026-06-11 13:44:39 +02:00
committed by GitHub
parent 73823c878e
commit dd2d375c7b
+14 -2
View File
@@ -30,14 +30,26 @@ function Fail($msg) {
exit 1 exit 1
} }
function Test-WindowsBashStub($path) {
if (-not $path) { return $false }
$lowered = $path.ToLowerInvariant()
foreach ($stub in @("system32\bash.exe", "sysnative\bash.exe", "windowsapps\bash.exe")) {
if ($lowered.Contains($stub)) { return $true }
}
return $false
}
function Find-GitBash { function Find-GitBash {
$cmd = Get-Command bash -ErrorAction SilentlyContinue $cmd = Get-Command bash -ErrorAction SilentlyContinue
if ($cmd) { return $cmd.Source } if ($cmd -and -not (Test-WindowsBashStub $cmd.Source)) { return $cmd.Source }
$roots = @() $roots = @()
foreach ($name in @("ProgramFiles", "ProgramW6432", "ProgramFiles(x86)", "LocalAppData")) { foreach ($name in @("ProgramFiles", "ProgramW6432", "ProgramFiles(x86)", "LocalAppData")) {
$base = [Environment]::GetEnvironmentVariable($name) $base = [Environment]::GetEnvironmentVariable($name)
if ($base) { $roots += (Join-Path $base "Git") } if ($base) {
$roots += (Join-Path $base "Git")
if ($name -eq "LocalAppData") { $roots += (Join-Path $base "Programs\Git") }
}
} }
$roots += @("C:\Program Files\Git", "C:\Program Files (x86)\Git") $roots += @("C:\Program Files\Git", "C:\Program Files (x86)\Git")