From 3ddcd260153bcef040c31754737615e759f9b9c9 Mon Sep 17 00:00:00 2001 From: Thomas Schmucker Date: Fri, 31 Jul 2026 11:00:04 +0200 Subject: Test, ob unter Windows das Kommando tatsächlich installiert wurde, hinzugefügt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bootstrap-win/neovim.ps1 | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/bootstrap-win/neovim.ps1 b/bootstrap-win/neovim.ps1 index 0e7016e..a20f291 100644 --- a/bootstrap-win/neovim.ps1 +++ b/bootstrap-win/neovim.ps1 @@ -103,9 +103,28 @@ function Install-WingetPackage([string]$Binary, [string]$Id) { Write-Ok $Id } -function Install-NpmPackage([string]$Binary, [string]$Package) { +function Test-BinaryRuns([string]$Binary, [string[]]$VerifyArgs) { + # Einige npm-Pakete (z.B. tree-sitter-cli) installieren nur einen JS-Shim + # und laden die eigentliche native Binary per Post-Install-Skript separat + # von GitHub herunter. Schlaegt dieser Download fehl (Proxy, ignore-scripts, + # Antivirus-Quarantaene), landet der Shim trotzdem im PATH und + # Test-CommandExists meldet faelschlich Erfolg. Deshalb hier tatsaechlich + # ausfuehren statt nur pruefen, ob der Befehlsname aufloesbar ist. + try { + & $Binary @VerifyArgs *> $null + return $LASTEXITCODE -eq 0 + } catch { + return $false + } +} + +function Install-NpmPackage([string]$Binary, [string]$Package, [string[]]$VerifyArgs = $null) { if (Test-CommandExists $Binary) { - Write-Skip $Binary + if ($VerifyArgs -and -not (Test-BinaryRuns $Binary $VerifyArgs)) { + Write-Warn "'$Binary' ist im PATH, laesst sich aber nicht ausfuehren - vermutlich hat der Post-Install-Download von '$Package' nicht geklappt (Proxy/ignore-scripts pruefen). 'npm uninstall -g $Package' und neu installieren." + } else { + Write-Skip $Binary + } return } @@ -122,6 +141,11 @@ function Install-NpmPackage([string]$Binary, [string]$Package) { return } + if ($VerifyArgs -and -not (Test-BinaryRuns $Binary $VerifyArgs)) { + Write-Warn "npm install -g $Package war erfolgreich, aber '$Binary' laesst sich nicht ausfuehren - vermutlich hat der Post-Install-Download der nativen Binary nicht geklappt (Proxy/ignore-scripts pruefen)." + return + } + Write-Ok $Package } @@ -158,7 +182,7 @@ function Install-Formatters { function Install-Tools { Install-WingetPackage -Binary "rg" -Id "BurntSushi.ripgrep.MSVC" Install-WingetPackage -Binary "fd" -Id "sharkdp.fd" - Install-NpmPackage -Binary "tree-sitter" -Package "tree-sitter-cli" + Install-NpmPackage -Binary "tree-sitter" -Package "tree-sitter-cli" -VerifyArgs @("--version") # MSVC (cl.exe) ist bereits vorhanden, kein winget-Paket noetig - Neovim # dafuer aber aus einer "Developer PowerShell for VS" starten. -- cgit v1.3