@@ -78,13 +78,10 @@ class AzureEngSemanticVersion : IComparable {
7878
7979 if ($null -eq $matches [' prelabel' ])
8080 {
81- # artifically provide these values for non-prereleases to enable easy sorting of them later than prereleases.
82- $this.PrereleaseLabel = " zzz"
83- $this.PrereleaseNumber = 99999999
8481 $this.IsPrerelease = $false
8582 $this.VersionType = " GA"
8683 if ($this.Major -eq 0 ) {
87- # Treat initial 0 versions as a prerelease beta's
84+ # Treat initial 0 versions as a prerelease beta's
8885 $this.VersionType = " Beta"
8986 $this.IsPrerelease = $true
9087 }
@@ -116,7 +113,7 @@ class AzureEngSemanticVersion : IComparable {
116113 # See https://azure.github.io/azure-sdk/policies_releases.html#package-versioning
117114 [bool ] HasValidPrereleaseLabel()
118115 {
119- if ($this.IsPrerelease -eq $true ) {
116+ if ($this.PrereleaseLabel ) {
120117 if ($this.PrereleaseLabel -ne $this.DefaultPrereleaseLabel -and $this.PrereleaseLabel -ne $this.DefaultAlphaReleaseLabel ) {
121118 Write-Host " Unexpected pre-release identifier '$ ( $this.PrereleaseLabel ) ', " `
122119 " should be '$ ( $this.DefaultPrereleaseLabel ) ' or '$ ( $this.DefaultAlphaReleaseLabel ) '"
@@ -136,7 +133,7 @@ class AzureEngSemanticVersion : IComparable {
136133 {
137134 $versionString = " {0}.{1}.{2}" -F $this.Major , $this.Minor , $this.Patch
138135
139- if ($this.IsPrerelease -and $this . PrereleaseLabel -ne " zzz " )
136+ if ($this.PrereleaseLabel )
140137 {
141138 $versionString += $this.PrereleaseLabelSeparator + $this.PrereleaseLabel + `
142139 $this.PrereleaseNumberSeparator + $this.PrereleaseNumber
@@ -147,24 +144,42 @@ class AzureEngSemanticVersion : IComparable {
147144 return $versionString ;
148145 }
149146
150- [void ] IncrementAndSetToPrerelease() {
151- if ($this.IsPrerelease -eq $false )
147+ [void ] IncrementAndSetToPrerelease($Segment ) {
148+ if ($this.BuildNumber )
152149 {
153- $this.PrereleaseLabel = $this.DefaultPrereleaseLabel
154- $this.PrereleaseNumber = 1
155- $this.Minor ++
156- $this.Patch = 0
157- $this.IsPrerelease = $true
150+ throw " Cannot increment releases tagged with azure pipelines build numbers"
151+ }
152+
153+ if ($this.PrereleaseLabel )
154+ {
155+ $this.PrereleaseNumber ++
158156 }
159157 else
160158 {
161- if ($this.BuildNumber ) {
162- throw " Cannot increment releases tagged with azure pipelines build numbers"
159+ $this .$Segment ++
160+ if ($Segment -eq " Major" ) {
161+ $this.Minor = 0
162+ $this.Patch = 0
163163 }
164- $this.PrereleaseNumber ++
164+ if ($Segment -eq " Minor" ) {
165+ $this.Patch = 0
166+ }
167+
168+ # If the major version is 0, we don't need a prerelease label
169+ if ($this.Major -ne 0 )
170+ {
171+ $this.PrereleaseLabel = $this.DefaultPrereleaseLabel
172+ $this.PrereleaseNumber = 1
173+ }
174+
175+ $this.IsPrerelease = $true
165176 }
166177 }
167178
179+ [void ] IncrementAndSetToPrerelease() {
180+ $this.IncrementAndSetToPrerelease (" Minor" )
181+ }
182+
168183 [void ] SetupPythonConventions()
169184 {
170185 # Python uses no separators and "b" for beta so this sets up the the object to work with those conventions
@@ -198,11 +213,30 @@ class AzureEngSemanticVersion : IComparable {
198213 $ret = $this.Patch.CompareTo ($other.Patch )
199214 if ($ret ) { return $ret }
200215
216+ # provide artificial prerelease values for non-prereleases to sort them later than prereleases.
217+ if ($this.PrereleaseLabel ) {
218+ $thisPrereleaseLabel = $this.PrereleaseLabel
219+ $thisPrereleaseNumber = $this.PrereleaseNumber
220+ }
221+ else {
222+ $thisPrereleaseLabel = " zzz"
223+ $thisPrereleaseNumber = 99999999
224+ }
225+
226+ if ($other.PrereleaseLabel ) {
227+ $otherPrereleaseLabel = $other.PrereleaseLabel
228+ $otherPrereleaseNumber = $other.PrereleaseNumber
229+ }
230+ else {
231+ $otherPrereleaseLabel = " zzz"
232+ $otherPrereleaseNumber = 99999999
233+ }
234+
201235 # Mimic PowerShell that uses case-insensitive comparisons by default.
202- $ret = [string ]::Compare($this .PrereleaseLabel , $other .PrereleaseLabel , $true )
236+ $ret = [string ]::Compare($thisPrereleaseLabel , $otherPrereleaseLabel , $true )
203237 if ($ret ) { return $ret }
204238
205- $ret = $this .PrereleaseNumber. CompareTo ($other .PrereleaseNumber )
239+ $ret = $thisPrereleaseNumber . CompareTo ($otherPrereleaseNumber )
206240 if ($ret ) { return $ret }
207241
208242 return ([int ] $this.BuildNumber ).CompareTo([int ] $other.BuildNumber )
@@ -360,6 +394,41 @@ class AzureEngSemanticVersion : IComparable {
360394 Write-Host " Error: Python beta string did not correctly increment"
361395 }
362396
397+ $version = [AzureEngSemanticVersion ]::ParseVersionString(" 0.1.2" )
398+ $version.IncrementAndSetToPrerelease ()
399+ $expected = " 0.2.0"
400+ if ($expected -ne $version.ToString ()) {
401+ Write-Host " Error: version string did not correctly increment. Expected: $expected , Actual: $version "
402+ }
403+
404+ $version = [AzureEngSemanticVersion ]::ParseVersionString(" 0.1.2" )
405+ $version.IncrementAndSetToPrerelease (" patch" )
406+ $expected = " 0.1.3"
407+ if ($expected -ne $version.ToString ()) {
408+ Write-Host " Error: version string did not correctly increment. Expected: $expected , Actual: $version "
409+ }
410+
411+ $version = [AzureEngSemanticVersion ]::ParseVersionString(" 0.1.2" )
412+ $version.IncrementAndSetToPrerelease (" minor" )
413+ $expected = " 0.2.0"
414+ if ($expected -ne $version.ToString ()) {
415+ Write-Host " Error: version string did not correctly increment. Expected: $expected , Actual: $version "
416+ }
417+
418+ $version = [AzureEngSemanticVersion ]::ParseVersionString(" 0.1.2" )
419+ $version.IncrementAndSetToPrerelease (" major" )
420+ $expected = " 1.0.0-beta.1"
421+ if ($expected -ne $version.ToString ()) {
422+ Write-Host " Error: version string did not correctly increment. Expected: $expected , Actual: $version "
423+ }
424+
425+ $version = [AzureEngSemanticVersion ]::ParseVersionString(" 1.0.0-beta.1" )
426+ $version.IncrementAndSetToPrerelease ()
427+ $expected = " 1.0.0-beta.2"
428+ if ($expected -ne $version.ToString ()) {
429+ Write-Host " Error: version string did not correctly increment. Expected: $expected , Actual: $version "
430+ }
431+
363432 Write-Host " QuickTests done"
364433 }
365- }
434+ }
0 commit comments