function Compare-ReleaseMetadata { <# .SYNOPSIS Compare two version release metadata parts for equivalence using the same pattern as Compare-SemVer. This function principally intended to be called from Compare-SemVer, prefer that over this. .PARAMETER Version1Metadata [string] A portion of a version for comparing/evaluating just the portion of the metadata .PARAMETER Version2Metadata [string] A portion of a version for comparing/evaluating just the portion of the metadata #> [CmdletBinding()] [OutputType([int])] param( [string]$Version1Metadata, [string]$Version2Metadata ) if((-not $Version1Metadata) -and (-not $Version2Metadata)) { return 0 } # For release part, 1.0.0 is newer/greater then 1.0.0-alpha. So return 1 here. if((-not $Version1Metadata) -and $Version2Metadata) { return 1 } if(($Version1Metadata) -and (-not $Version2Metadata)) { return -1 } $version1Parts=$Version1Metadata.Trim('-').Split('.') $version2Parts=$Version2Metadata.Trim('-').Split('.') $length = [System.Math]::Min($version1Parts.Length, $version2Parts.Length) for ($i = 0; ($i -lt $length); $i++) { $result = Compare-MetadataPart -Version1Part $version1Parts[$i] -Version2Part $version2Parts[$i] if ($result -ne 0) { return $result } } # so far we found two versions are the same. If length is the same, we think two version are indeed the same if($version1Parts.Length -eq $version1Parts.Length) { return 0 } # 1.0.0-alpha < 1.0.0-alpha.1 if($version1Parts.Length -lt $length) { return -1 } else { return 1 } }