From 24d3518bf2337321307f4dbe2a8762ffeb84d064 Mon Sep 17 00:00:00 2001 From: Bill Hurt Date: Mon, 12 Nov 2018 22:50:02 -0800 Subject: [PATCH] Fix #80 Get-BuildVariable breaks if git is aliased [hub](https://github.com/github/hub) is a tool put out by git that adds commandline tools to help developers work with github from the commandline in a more natural way. It is designed to be used by aliasing git to hub.exe. Hub then handles the additional commands it knows how to implement, and transparently passes through any native git commands to git.exe. The Get-BuildVariable cmdlet does not account for the possibility that git might be aliased, and assumes that the output of Get-Command 'git' can authoritatively be treated as either returning a Path to git or determining that git is not installed on a system. Unfortunately if git is aliased to hub.exe then the result of Get-Command is not an object of type `System.Management.Automation.ApplicationInfo` that has a `Path` property but an object of type `System.Management.Automation.AliasInfo` which does not contain a path either to git or to the executable it's been aliased to. One possible strategy would be to find that git has been alaised and find the path to executable that it has been aliased to, but this seems less than ideal since the third party binary is not what this module really wants to execute, and this module will only ever need the capabilities of the native git.exe, not the extended capabilities of hub. This change switches the method of determining the path to git over to looking at each path in the $env:PATH variable, and returning the path to the first instance of git.exe that it finds. This should be the same method used by Get-Command, and isn't fooled by the presence of aliases. This change should be a fix for #80 --- BuildHelpers/Public/Get-BuildVariables.ps1 | 4 ++-- BuildHelpers/Public/Invoke-Git.ps1 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BuildHelpers/Public/Get-BuildVariables.ps1 b/BuildHelpers/Public/Get-BuildVariables.ps1 index 182f27d..7789bd6 100644 --- a/BuildHelpers/Public/Get-BuildVariables.ps1 +++ b/BuildHelpers/Public/Get-BuildVariables.ps1 @@ -69,13 +69,13 @@ function Get-BuildVariables { } $true })] - $GitPath = 'git' + $GitPath ) $Path = ( Resolve-Path $Path ).Path $Environment = Get-Item ENV: if(!$PSboundParameters.ContainsKey('GitPath')) { - $GitPath = (Get-Command $GitPath -ErrorAction SilentlyContinue)[0].Path + $GitPath = (Get-ChildItem ($env:PATH -split ';') -filter git.exe -ErrorAction SilentlyContinue | Select-Object -First 1).Fullname } $WeCanGit = ( (Test-Path $( Join-Path $Path .git )) -and (Get-Command $GitPath -ErrorAction SilentlyContinue) ) diff --git a/BuildHelpers/Public/Invoke-Git.ps1 b/BuildHelpers/Public/Invoke-Git.ps1 index 66aeaa4..7519a67 100644 --- a/BuildHelpers/Public/Invoke-Git.ps1 +++ b/BuildHelpers/Public/Invoke-Git.ps1 @@ -77,14 +77,14 @@ } $true })] - [string]$GitPath = 'git' + [string]$GitPath ) $Path = (Resolve-Path $Path).Path # http://stackoverflow.com/questions/8761888/powershell-capturing-standard-out-and-error-with-start-process $pinfo = New-Object System.Diagnostics.ProcessStartInfo if(!$PSBoundParameters.ContainsKey('GitPath')) { - $GitPath = (Get-Command $GitPath -ErrorAction Stop)[0].Path + $GitPath = (Get-ChildItem ($env:PATH -split ';') -filter git.exe -ErrorAction SilentlyContinue | Select-Object -First 1).Fullname } $pinfo.FileName = $GitPath $Command = $GitPath