functions/Invoke/Invoke-Git.ps1
<#
.Synopsis Invoke git, handling its quirky stderr that isn't error https://stackoverflow.com/questions/34820975/git-clone-redirect-stderr-to-stdout-but-keep-errors-being-written-to-stderr .Outputs Git messages, and lastly the exit code .Example Invoke-Git push .Example Invoke-Git "add ." #> function Invoke-Git { param( [Parameter(Mandatory)] [string] $Command ) try { $exit = 0 $path = [System.IO.Path]::GetTempFileName() Write-Host "> git $Command" Invoke-Expression "git $Command 2> $path" $exit = $LASTEXITCODE if ( $exit -gt 0 ) { Write-Error (Get-Content $path).ToString() } else { Get-Content $path | Select-Object -First 1 } $exit } catch { Write-Host "Error: $($_.Exception.Message) `n$($_.ScriptStackTrace)" } finally { if (Test-Path $path) { Remove-Item $path } } } |