1
0
mirror of https://github.com/Llewellynvdm/starship.git synced 2024-12-01 01:04:00 +00:00

fix(pwsh): replace Get-Error with $error[0] (#2873)

Get-Error does not exist in all versions of PowerShell, and attempting to use it on machines where it does not exist pollutes $error. Someone may be tempted to use -ErrorAction Ignore but since the command does not exist, it still ends up in $error

This is a dual bug fix because it actually gets errors on all machines now and it does not pollute $error.
This commit is contained in:
Chrissy LeMaire 2021-07-13 22:31:14 +02:00 committed by GitHub
parent 0228a53c9f
commit c9249dbe0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -81,8 +81,8 @@ function global:prompt {
if ($lastCmd = Get-History -Count 1) { if ($lastCmd = Get-History -Count 1) {
# In case we have a False on the Dollar hook, we know there's an error. # In case we have a False on the Dollar hook, we know there's an error.
if (-not $origDollarQuestion) { if (-not $origDollarQuestion) {
# We retrieve the InvocationInfo from the most recent error. # We retrieve the InvocationInfo from the most recent error using $error[0]
$lastCmdletError = try { Get-Error | Where-Object { $_ -ne $null } | Select-Object -expand InvocationInfo } catch { $null } $lastCmdletError = try { $error[0] | Where-Object { $_ -ne $null } | Select-Object -ExpandProperty InvocationInfo } catch { $null }
# We check if the last command executed matches the line that caused the last error, in which case we know # We check if the last command executed matches the line that caused the last error, in which case we know
# it was an internal Powershell command, otherwise, there MUST be an error code. # it was an internal Powershell command, otherwise, there MUST be an error code.
$lastExitCodeForPrompt = if ($null -ne $lastCmdletError -and $lastCmd.CommandLine -eq $lastCmdletError.Line) { 1 } else { $origLastExitCode } $lastExitCodeForPrompt = if ($null -ne $lastCmdletError -and $lastCmd.CommandLine -eq $lastCmdletError.Line) { 1 } else { $origLastExitCode }