core/public/Get-JaxRepoRoot.ps1
|
function Get-JaxRepoRoot { [CmdletBinding()] param ( [string] $StartPath = (Get-Location).Path, [switch] $Exact ) $startPathWasExplicit = $PSBoundParameters.ContainsKey('StartPath') if ($Exact) { if (-not (Test-Path -LiteralPath $StartPath -PathType Container)) { throw "Repository root does not exist or is not a directory: $StartPath" } return (Resolve-Path -LiteralPath $StartPath).Path } if (-not $startPathWasExplicit) { $envOverride = $env:JAX_REPO_ROOT if (-not [string]::IsNullOrWhiteSpace($envOverride) -and (Test-Path -LiteralPath $envOverride -PathType Container)) { return (Resolve-Path -LiteralPath $envOverride).Path } } $resolvedStart = $StartPath if (Test-Path -LiteralPath $StartPath -PathType Container) { $resolvedStart = (Resolve-Path -LiteralPath $StartPath).Path } $gitCommand = Get-Command -Name git -ErrorAction SilentlyContinue if ($null -ne $gitCommand) { try { $gitRoot = & git -C $resolvedStart rev-parse --show-toplevel 2>$null if ($LASTEXITCODE -eq 0 -and -not [string]::IsNullOrWhiteSpace($gitRoot)) { return (Resolve-Path $gitRoot).Path } } catch { } } $current = $resolvedStart while ($true) { $gitMarker = Join-Path $current '.git' if (Test-Path -Path $gitMarker) { return $current } $parent = Split-Path $current -Parent if ([string]::IsNullOrWhiteSpace($parent) -or $parent -eq $current) { break } $current = $parent } return $resolvedStart } |