Private/Compare-PublishedVersions.ps1
|
function Compare-PublishedVersions { <# .SYNOPSIS Finds versions that are missing from the published versions list. .DESCRIPTION Compares a list of release versions against a list of published versions to find which releases are not yet published. When comparing, treats Revision=-1 as a wildcard that matches any Revision value. .PARAMETER ReleaseVersions Array of version objects from resolved releases. .PARAMETER PublishedVersions Array of version objects already published to a source. .OUTPUTS System.Version[] Array of versions that are in ReleaseVersions but not in PublishedVersions. #> [CmdletBinding()] param( [Parameter(Mandatory)] [AllowEmptyCollection()] [version[]]$ReleaseVersions, [Parameter(Mandatory)] [AllowEmptyCollection()] [version[]]$PublishedVersions ) $ReleaseVersions | Where-Object { $releaseVersion = [version]$_ $isPublished = $false foreach ($pubVersion in $PublishedVersions) { # Compare Major, Minor, Build if ($pubVersion.Major -eq $releaseVersion.Major -and $pubVersion.Minor -eq $releaseVersion.Minor -and $pubVersion.Build -eq $releaseVersion.Build) { # If either has Revision=-1, treat it as a wildcard match if ($pubVersion.Revision -eq -1 -or $releaseVersion.Revision -eq -1) { $isPublished = $true break } # Both have explicit Revision values, must match exactly if ($pubVersion.Revision -eq $releaseVersion.Revision) { $isPublished = $true break } } } -not $isPublished } } |