Skip to content

Commit 14de950

Browse files
azure-sdkheaths
andauthored
Sort changelogs by date then version (Azure#19430)
Fixes #1389 Co-authored-by: Heath Stewart <heaths@microsoft.com>
1 parent b47775d commit 14de950

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

eng/common/scripts/ChangeLog-Operations.ps1

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,15 +193,14 @@ function Set-ChangeLogContent {
193193

194194
try
195195
{
196-
$VersionsSorted = [AzureEngSemanticVersion]::SortVersionStrings($ChangeLogEntries.Keys)
196+
$ChangeLogEntries = $ChangeLogEntries.Values | Sort-Object -Descending -Property ReleaseStatus, ReleaseVersion
197197
}
198198
catch {
199199
LogError "Problem sorting version in ChangeLogEntries"
200200
return
201201
}
202202

203-
foreach ($version in $VersionsSorted) {
204-
$changeLogEntry = $ChangeLogEntries[$version]
203+
foreach ($changeLogEntry in $ChangeLogEntries) {
205204
$changeLogContent += $changeLogEntry.ReleaseTitle
206205
if ($changeLogEntry.ReleaseContent.Count -eq 0) {
207206
$changeLogContent += @("","")

eng/common/scripts/SemVer.ps1

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Components: Major.Minor.Patch-PrereleaseLabel.PrereleaseNumber.BuildNumber
1313
Note: A builtin Powershell version of SemVer exists in 'System.Management.Automation'. At this time, it does not parsing of PrereleaseNumber. It's name is also type accelerated to 'SemVer'.
1414
#>
1515

16-
class AzureEngSemanticVersion {
16+
class AzureEngSemanticVersion : IComparable {
1717
[int] $Major
1818
[int] $Minor
1919
[int] $Patch
@@ -178,6 +178,31 @@ class AzureEngSemanticVersion {
178178
$this.DefaultAlphaReleaseLabel = "alpha"
179179
}
180180

181+
[int] CompareTo($other)
182+
{
183+
if ($other -isnot [AzureEngSemanticVersion]) {
184+
throw "Cannot compare $other with $this"
185+
}
186+
187+
$ret = $this.Major.CompareTo($other.Major)
188+
if ($ret) { return $ret }
189+
190+
$ret = $this.Minor.CompareTo($other.Minor)
191+
if ($ret) { return $ret }
192+
193+
$ret = $this.Patch.CompareTo($other.Patch)
194+
if ($ret) { return $ret }
195+
196+
# Mimic PowerShell that uses case-insensitive comparisons by default.
197+
$ret = [string]::Compare($this.PrereleaseLabel, $other.PrereleaseLabel, $true)
198+
if ($ret) { return $ret }
199+
200+
$ret = $this.PrereleaseNumber.CompareTo($other.PrereleaseNumber)
201+
if ($ret) { return $ret }
202+
203+
return ([int] $this.BuildNumber).CompareTo([int] $other.BuildNumber)
204+
}
205+
181206
static [string[]] SortVersionStrings([string[]] $versionStrings)
182207
{
183208
$versions = $versionStrings | ForEach-Object { [AzureEngSemanticVersion]::ParseVersionString($_) }
@@ -187,10 +212,7 @@ class AzureEngSemanticVersion {
187212

188213
static [AzureEngSemanticVersion[]] SortVersions([AzureEngSemanticVersion[]] $versions)
189214
{
190-
return ($versions | `
191-
Sort-Object -Descending -Property `
192-
Major, Minor, Patch, PrereleaseLabel, PrereleaseNumber, `
193-
@{ Expression = { [int]$_.BuildNumber }; Descending = $true })
215+
return $versions | Sort-Object -Descending
194216
}
195217

196218
static [void] QuickTests()

0 commit comments

Comments
 (0)