Functions/Get-IBHGitAheadBy.ps1
<#
.SYNOPSIS Check if the git local repository is ahead of the origin repository. .DESCRIPTION Return the number of commits ahead of the origin repository. It will return 0, if we are not ahead. .OUTPUTS System.Int32. Number of commits ahead. .EXAMPLE PS C:\> Get-IBHGitAheadBy Return the number of commits ahead by the origin repository. .LINK https://github.com/claudiospizzi/InvokeBuildHelper #> function Get-IBHGitAheadBy { [CmdletBinding()] [OutputType([System.Int32])] param ( # Root path of the git repository. [Parameter(Mandatory = $false)] [System.String] $Path ) try { # Switch to the desired location, if specifed if ($PSBoundParameters.ContainsKey('Path')) { $locationStackName = [System.Guid]::NewGuid().Guid Push-Location -Path $Path -StackName $locationStackName } $status = git -c core.quotepath=false -c color.status=false status -uno --short --branch $status = $status -join "`n" $aheadBy = 0 if ($status -match '\[(?:ahead (?<ahead>\d+))?(?:, )?(?:behind (?<behind>\d+))?(?<gone>gone)?\]') { if ($null -ne $Matches -and $Matches.Keys -contains 'ahead') { $aheadBy = [System.Int32] $Matches['ahead'] } } return $aheadBy } finally { # Go back to the original location if ($PSBoundParameters.ContainsKey('Path')) { Pop-Location -StackName $locationStackName } } } |