@@ -28,67 +28,75 @@ public class SemanticVersion : IFormattable, IComparable<SemanticVersion>, IEqua
28
28
29
29
public SemanticVersionBuildMetaData BuildMetaData { get ; init ; }
30
30
31
- public bool IsLabeledWith ( string value ) => PreReleaseTag . HasTag ( ) && string . Equals ( PreReleaseTag . Name , value , StringComparison . OrdinalIgnoreCase ) ;
31
+ public bool IsLabeledWith ( string value ) => PreReleaseTag . HasTag ( ) && PreReleaseTag . Name . IsEquivalentTo ( value ) ;
32
32
33
33
public bool IsMatchForBranchSpecificLabel ( string ? value )
34
34
=> PreReleaseTag . Name == string . Empty || value is null || IsLabeledWith ( value ) ;
35
35
36
36
public SemanticVersion ( long major = 0 , long minor = 0 , long patch = 0 )
37
37
{
38
- Major = major ;
39
- Minor = minor ;
40
- Patch = patch ;
41
- PreReleaseTag = new SemanticVersionPreReleaseTag ( ) ;
42
- BuildMetaData = new SemanticVersionBuildMetaData ( ) ;
38
+ this . Major = major ;
39
+ this . Minor = minor ;
40
+ this . Patch = patch ;
41
+ this . PreReleaseTag = new SemanticVersionPreReleaseTag ( ) ;
42
+ this . BuildMetaData = new SemanticVersionBuildMetaData ( ) ;
43
43
}
44
44
45
45
public SemanticVersion ( SemanticVersion semanticVersion )
46
46
{
47
47
semanticVersion . NotNull ( ) ;
48
48
49
- Major = semanticVersion . Major ;
50
- Minor = semanticVersion . Minor ;
51
- Patch = semanticVersion . Patch ;
49
+ this . Major = semanticVersion . Major ;
50
+ this . Minor = semanticVersion . Minor ;
51
+ this . Patch = semanticVersion . Patch ;
52
52
53
- PreReleaseTag = new SemanticVersionPreReleaseTag ( semanticVersion . PreReleaseTag ) ;
54
- BuildMetaData = new SemanticVersionBuildMetaData ( semanticVersion . BuildMetaData ) ;
53
+ this . PreReleaseTag = new SemanticVersionPreReleaseTag ( semanticVersion . PreReleaseTag ) ;
54
+ this . BuildMetaData = new SemanticVersionBuildMetaData ( semanticVersion . BuildMetaData ) ;
55
55
}
56
56
57
57
public bool Equals ( SemanticVersion ? obj )
58
58
{
59
59
if ( obj == null )
60
+ {
60
61
return false ;
61
- return Major == obj . Major && Minor == obj . Minor && Patch == obj . Patch && PreReleaseTag == obj . PreReleaseTag && BuildMetaData == obj . BuildMetaData ;
62
+ }
63
+ return this . Major == obj . Major && this . Minor == obj . Minor && this . Patch == obj . Patch && this . PreReleaseTag == obj . PreReleaseTag && this . BuildMetaData == obj . BuildMetaData ;
62
64
}
63
65
64
66
public bool IsEmpty ( ) => Equals ( Empty ) ;
65
67
66
68
public override bool Equals ( object ? obj )
67
69
{
68
70
if ( obj is null )
71
+ {
69
72
return false ;
73
+ }
70
74
if ( ReferenceEquals ( this , obj ) )
75
+ {
71
76
return true ;
77
+ }
72
78
return obj . GetType ( ) == GetType ( ) && Equals ( ( SemanticVersion ) obj ) ;
73
79
}
74
80
75
81
public override int GetHashCode ( )
76
82
{
77
83
unchecked
78
84
{
79
- var hashCode = Major . GetHashCode ( ) ;
80
- hashCode = hashCode * 397 ^ Minor . GetHashCode ( ) ;
81
- hashCode = hashCode * 397 ^ Patch . GetHashCode ( ) ;
82
- hashCode = hashCode * 397 ^ PreReleaseTag . GetHashCode ( ) ;
83
- hashCode = hashCode * 397 ^ BuildMetaData . GetHashCode ( ) ;
85
+ var hashCode = this . Major . GetHashCode ( ) ;
86
+ hashCode = ( hashCode * 397 ) ^ this . Minor . GetHashCode ( ) ;
87
+ hashCode = ( hashCode * 397 ) ^ this . Patch . GetHashCode ( ) ;
88
+ hashCode = ( hashCode * 397 ) ^ this . PreReleaseTag . GetHashCode ( ) ;
89
+ hashCode = ( hashCode * 397 ) ^ this . BuildMetaData . GetHashCode ( ) ;
84
90
return hashCode ;
85
91
}
86
92
}
87
93
88
94
public static bool operator == ( SemanticVersion ? v1 , SemanticVersion ? v2 )
89
95
{
90
96
if ( v1 is null )
97
+ {
91
98
return v2 is null ;
99
+ }
92
100
return v1 . Equals ( v2 ) ;
93
101
}
94
102
@@ -217,29 +225,39 @@ private static bool TryParseLoose(string version, [NotNullWhen(true)] out Semant
217
225
public int CompareTo ( SemanticVersion ? value , bool includePrerelease )
218
226
{
219
227
if ( value == null )
228
+ {
220
229
return 1 ;
221
- if ( Major != value . Major )
230
+ }
231
+ if ( this . Major != value . Major )
222
232
{
223
- if ( Major > value . Major )
233
+ if ( this . Major > value . Major )
234
+ {
224
235
return 1 ;
236
+ }
225
237
return - 1 ;
226
238
}
227
- if ( Minor != value . Minor )
239
+ if ( this . Minor != value . Minor )
228
240
{
229
- if ( Minor > value . Minor )
241
+ if ( this . Minor > value . Minor )
242
+ {
230
243
return 1 ;
244
+ }
231
245
return - 1 ;
232
246
}
233
- if ( Patch != value . Patch )
247
+ if ( this . Patch != value . Patch )
234
248
{
235
- if ( Patch > value . Patch )
249
+ if ( this . Patch > value . Patch )
250
+ {
236
251
return 1 ;
252
+ }
237
253
return - 1 ;
238
254
}
239
- if ( includePrerelease && PreReleaseTag != value . PreReleaseTag )
255
+ if ( includePrerelease && this . PreReleaseTag != value . PreReleaseTag )
240
256
{
241
- if ( PreReleaseTag > value . PreReleaseTag )
257
+ if ( this . PreReleaseTag > value . PreReleaseTag )
258
+ {
242
259
return 1 ;
260
+ }
243
261
return - 1 ;
244
262
}
245
263
@@ -259,7 +277,7 @@ public int CompareTo(SemanticVersion? value, bool includePrerelease)
259
277
/// </summary>
260
278
public string ToString ( string ? format , IFormatProvider ? formatProvider )
261
279
{
262
- if ( string . IsNullOrEmpty ( format ) )
280
+ if ( format . IsNullOrEmpty ( ) )
263
281
format = "s" ;
264
282
265
283
if ( formatProvider ? . GetFormat ( GetType ( ) ) is ICustomFormatter formatter )
@@ -270,22 +288,22 @@ public string ToString(string? format, IFormatProvider? formatProvider)
270
288
switch ( format )
271
289
{
272
290
case "j" :
273
- return $ "{ Major } .{ Minor } .{ Patch } ";
291
+ return $ "{ this . Major } .{ this . Minor } .{ this . Patch } ";
274
292
case "s" :
275
- return PreReleaseTag . HasTag ( ) ? $ "{ ToString ( "j" ) } -{ PreReleaseTag } " : ToString ( "j" ) ;
293
+ return this . PreReleaseTag . HasTag ( ) ? $ "{ ToString ( "j" ) } -{ this . PreReleaseTag } " : ToString ( "j" ) ;
276
294
case "t" :
277
- return PreReleaseTag . HasTag ( ) ? $ "{ ToString ( "j" ) } -{ PreReleaseTag . ToString ( "t" ) } " : ToString ( "j" ) ;
295
+ return this . PreReleaseTag . HasTag ( ) ? $ "{ ToString ( "j" ) } -{ this . PreReleaseTag . ToString ( "t" ) } " : ToString ( "j" ) ;
278
296
case "f" :
279
297
{
280
- var buildMetadata = BuildMetaData . ToString ( ) ;
298
+ var buildMetadata = this . BuildMetaData . ToString ( ) ;
281
299
282
- return ! string . IsNullOrEmpty ( buildMetadata ) ? $ "{ ToString ( "s" ) } +{ buildMetadata } " : ToString ( "s" ) ;
300
+ return ! buildMetadata . IsNullOrEmpty ( ) ? $ "{ ToString ( "s" ) } +{ buildMetadata } " : ToString ( "s" ) ;
283
301
}
284
302
case "i" :
285
303
{
286
- var buildMetadata = BuildMetaData . ToString ( "f" ) ;
304
+ var buildMetadata = this . BuildMetaData . ToString ( "f" ) ;
287
305
288
- return ! string . IsNullOrEmpty ( buildMetadata ) ? $ "{ ToString ( "s" ) } +{ buildMetadata } " : ToString ( "s" ) ;
306
+ return ! buildMetadata . IsNullOrEmpty ( ) ? $ "{ ToString ( "s" ) } +{ buildMetadata } " : ToString ( "s" ) ;
289
307
}
290
308
default :
291
309
throw new FormatException ( $ "Unknown format '{ format } '.") ;
@@ -325,8 +343,10 @@ public SemanticVersion IncrementVersion(VersionField incrementStrategy, string?
325
343
var preReleaseTagNumber = PreReleaseTag . Number ;
326
344
327
345
if ( PreReleaseTag . HasTag ( ) )
346
+ {
328
347
preReleaseTagNumber ++ ;
329
- else if ( ! string . IsNullOrEmpty ( label ) )
348
+ }
349
+ else if ( ! label . IsNullOrEmpty ( ) )
330
350
{
331
351
preReleaseTagNumber = 1 ;
332
352
preReleaseTagName = label ;
0 commit comments