Skip to content

Commit fa54904

Browse files
committed
Integrate some StringExtensions function into GitVersionCommon/Extensions
1 parent cbfce46 commit fa54904

File tree

5 files changed

+86
-45
lines changed

5 files changed

+86
-45
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System.Diagnostics.CodeAnalysis;
2+
3+
namespace GitVersion.Extensions
4+
{
5+
public static class StringExtensions
6+
{
7+
public static bool IsEquivalentTo(this string self, string? other) =>
8+
string.Equals(self, other, StringComparison.OrdinalIgnoreCase);
9+
10+
/// <inheritdoc cref="string.IsNullOrEmpty"/>
11+
public static bool IsNullOrEmpty([NotNullWhen(false)] this string? value) => string.IsNullOrEmpty(value);
12+
13+
/// <inheritdoc cref="string.IsNullOrWhiteSpace"/>
14+
public static bool IsNullOrWhiteSpace([NotNullWhen(false)] this string? value) => string.IsNullOrWhiteSpace(value);
15+
16+
public static bool IsEmpty([NotNullWhen(false)] this string? value) => string.Empty.Equals(value);
17+
}
18+
}

src/GitVersion.Core/Git/ReferenceName.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ public static ReferenceName FromBranchName(string branchName)
7979
public override string ToString() => Friendly;
8080

8181
public bool TryGetSemanticVersion([NotNullWhen(true)] out (SemanticVersion Value, string? Name) result,
82-
Regex versionPatternRegex, string? labelPrefix, SemanticVersionFormat format)
82+
Regex versionPatternRegex,
83+
string? labelPrefix,
84+
SemanticVersionFormat format)
8385
{
8486
result = default;
8587

src/GitVersion.Core/Git/SemanticVersion.cs

Lines changed: 54 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -28,67 +28,75 @@ public class SemanticVersion : IFormattable, IComparable<SemanticVersion>, IEqua
2828

2929
public SemanticVersionBuildMetaData BuildMetaData { get; init; }
3030

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);
3232

3333
public bool IsMatchForBranchSpecificLabel(string? value)
3434
=> PreReleaseTag.Name == string.Empty || value is null || IsLabeledWith(value);
3535

3636
public SemanticVersion(long major = 0, long minor = 0, long patch = 0)
3737
{
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();
4343
}
4444

4545
public SemanticVersion(SemanticVersion semanticVersion)
4646
{
4747
semanticVersion.NotNull();
4848

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;
5252

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);
5555
}
5656

5757
public bool Equals(SemanticVersion? obj)
5858
{
5959
if (obj == null)
60+
{
6061
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;
6264
}
6365

6466
public bool IsEmpty() => Equals(Empty);
6567

6668
public override bool Equals(object? obj)
6769
{
6870
if (obj is null)
71+
{
6972
return false;
73+
}
7074
if (ReferenceEquals(this, obj))
75+
{
7176
return true;
77+
}
7278
return obj.GetType() == GetType() && Equals((SemanticVersion)obj);
7379
}
7480

7581
public override int GetHashCode()
7682
{
7783
unchecked
7884
{
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();
8490
return hashCode;
8591
}
8692
}
8793

8894
public static bool operator ==(SemanticVersion? v1, SemanticVersion? v2)
8995
{
9096
if (v1 is null)
97+
{
9198
return v2 is null;
99+
}
92100
return v1.Equals(v2);
93101
}
94102

@@ -217,29 +225,39 @@ private static bool TryParseLoose(string version, [NotNullWhen(true)] out Semant
217225
public int CompareTo(SemanticVersion? value, bool includePrerelease)
218226
{
219227
if (value == null)
228+
{
220229
return 1;
221-
if (Major != value.Major)
230+
}
231+
if (this.Major != value.Major)
222232
{
223-
if (Major > value.Major)
233+
if (this.Major > value.Major)
234+
{
224235
return 1;
236+
}
225237
return -1;
226238
}
227-
if (Minor != value.Minor)
239+
if (this.Minor != value.Minor)
228240
{
229-
if (Minor > value.Minor)
241+
if (this.Minor > value.Minor)
242+
{
230243
return 1;
244+
}
231245
return -1;
232246
}
233-
if (Patch != value.Patch)
247+
if (this.Patch != value.Patch)
234248
{
235-
if (Patch > value.Patch)
249+
if (this.Patch > value.Patch)
250+
{
236251
return 1;
252+
}
237253
return -1;
238254
}
239-
if (includePrerelease && PreReleaseTag != value.PreReleaseTag)
255+
if (includePrerelease && this.PreReleaseTag != value.PreReleaseTag)
240256
{
241-
if (PreReleaseTag > value.PreReleaseTag)
257+
if (this.PreReleaseTag > value.PreReleaseTag)
258+
{
242259
return 1;
260+
}
243261
return -1;
244262
}
245263

@@ -259,7 +277,7 @@ public int CompareTo(SemanticVersion? value, bool includePrerelease)
259277
/// </summary>
260278
public string ToString(string? format, IFormatProvider? formatProvider)
261279
{
262-
if (string.IsNullOrEmpty(format))
280+
if (format.IsNullOrEmpty())
263281
format = "s";
264282

265283
if (formatProvider?.GetFormat(GetType()) is ICustomFormatter formatter)
@@ -270,22 +288,22 @@ public string ToString(string? format, IFormatProvider? formatProvider)
270288
switch (format)
271289
{
272290
case "j":
273-
return $"{Major}.{Minor}.{Patch}";
291+
return $"{this.Major}.{this.Minor}.{this.Patch}";
274292
case "s":
275-
return PreReleaseTag.HasTag() ? $"{ToString("j")}-{PreReleaseTag}" : ToString("j");
293+
return this.PreReleaseTag.HasTag() ? $"{ToString("j")}-{this.PreReleaseTag}" : ToString("j");
276294
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");
278296
case "f":
279297
{
280-
var buildMetadata = BuildMetaData.ToString();
298+
var buildMetadata = this.BuildMetaData.ToString();
281299

282-
return !string.IsNullOrEmpty(buildMetadata) ? $"{ToString("s")}+{buildMetadata}" : ToString("s");
300+
return !buildMetadata.IsNullOrEmpty() ? $"{ToString("s")}+{buildMetadata}" : ToString("s");
283301
}
284302
case "i":
285303
{
286-
var buildMetadata = BuildMetaData.ToString("f");
304+
var buildMetadata = this.BuildMetaData.ToString("f");
287305

288-
return !string.IsNullOrEmpty(buildMetadata) ? $"{ToString("s")}+{buildMetadata}" : ToString("s");
306+
return !buildMetadata.IsNullOrEmpty() ? $"{ToString("s")}+{buildMetadata}" : ToString("s");
289307
}
290308
default:
291309
throw new FormatException($"Unknown format '{format}'.");
@@ -325,8 +343,10 @@ public SemanticVersion IncrementVersion(VersionField incrementStrategy, string?
325343
var preReleaseTagNumber = PreReleaseTag.Number;
326344

327345
if (PreReleaseTag.HasTag())
346+
{
328347
preReleaseTagNumber++;
329-
else if (!string.IsNullOrEmpty(label))
348+
}
349+
else if (!label.IsNullOrEmpty())
330350
{
331351
preReleaseTagNumber = 1;
332352
preReleaseTagName = label;

src/GitVersion.Core/Git/SemanticVersionBuildMetaData.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,15 @@ public string ToString(string? format, IFormatProvider? formatProvider)
8787
if (formatProvider?.GetFormat(GetType()) is ICustomFormatter formatter)
8888
return formatter.Format(format, this, formatProvider);
8989

90-
if (string.IsNullOrEmpty(format))
90+
if (format.IsNullOrEmpty())
9191
format = "b";
9292

9393
format = format.ToLower();
9494
return format.ToLower() switch
9595
{
9696
"b" => $"{this.CommitsSinceTag}",
97-
"s" => $"{this.CommitsSinceTag}{(string.IsNullOrEmpty(this.Sha) ? null : ".Sha." + this.Sha)}".TrimStart('.'),
98-
"f" => $"{this.CommitsSinceTag}{(string.IsNullOrEmpty(this.Branch) ? null : ".Branch." + FormatMetaDataPart(this.Branch))}{(string.IsNullOrEmpty(this.Sha) ? null : ".Sha." + this.Sha)}{(string.IsNullOrEmpty(this.OtherMetaData) ? null : "." + FormatMetaDataPart(this.OtherMetaData))}".TrimStart('.'),
97+
"s" => $"{this.CommitsSinceTag}{(this.Sha.IsNullOrEmpty() ? null : ".Sha." + this.Sha)}".TrimStart('.'),
98+
"f" => $"{this.CommitsSinceTag}{(this.Branch.IsNullOrEmpty() ? null : ".Branch." + FormatMetaDataPart(this.Branch))}{(this.Sha.IsNullOrEmpty() ? null : ".Sha." + this.Sha)}{(this.OtherMetaData.IsNullOrEmpty() ? null : "." + FormatMetaDataPart(this.OtherMetaData))}".TrimStart('.'),
9999
_ => throw new FormatException($"Unknown format '{format}'.")
100100
};
101101
}
@@ -112,7 +112,7 @@ public string ToString(string? format, IFormatProvider? formatProvider)
112112

113113
public static SemanticVersionBuildMetaData Parse(string? buildMetaData)
114114
{
115-
if (string.IsNullOrEmpty(buildMetaData))
115+
if (buildMetaData.IsNullOrEmpty())
116116
return Empty;
117117

118118
var parsed = ParseRegex.Match(buildMetaData);
@@ -135,7 +135,7 @@ public static SemanticVersionBuildMetaData Parse(string? buildMetaData)
135135
buildMetaDataSha = parsed.Groups["Sha"].Value;
136136

137137
string? buildMetaDataOtherMetaData = null;
138-
if (parsed.Groups["Other"].Success && !string.IsNullOrEmpty(parsed.Groups["Other"].Value))
138+
if (parsed.Groups["Other"].Success && !parsed.Groups["Other"].Value.IsNullOrEmpty())
139139
buildMetaDataOtherMetaData = parsed.Groups["Other"].Value.TrimStart('.');
140140

141141
return new()
@@ -150,7 +150,7 @@ public static SemanticVersionBuildMetaData Parse(string? buildMetaData)
150150

151151
private static string FormatMetaDataPart(string value)
152152
{
153-
if (!string.IsNullOrEmpty(value))
153+
if (!value.IsNullOrEmpty())
154154
value = Regex.Replace(value, "[^0-9A-Za-z-.]", "-");
155155
return value;
156156
}

src/GitVersion.Core/Git/SemanticVersionPreReleaseTag.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public SemanticVersionPreReleaseTag(SemanticVersionPreReleaseTag preReleaseTag)
7070

7171
public static SemanticVersionPreReleaseTag Parse(string? preReleaseTag)
7272
{
73-
if (string.IsNullOrEmpty(preReleaseTag))
73+
if (preReleaseTag.IsNullOrEmpty())
7474
{
7575
return new SemanticVersionPreReleaseTag();
7676
}
@@ -118,17 +118,18 @@ public string ToString(string? format, IFormatProvider? formatProvider)
118118
if (formatProvider?.GetFormat(GetType()) is ICustomFormatter formatter)
119119
return formatter.Format(format, this, formatProvider);
120120

121-
if (string.IsNullOrEmpty(format))
121+
if (format.IsNullOrEmpty())
122122
format = "t";
123123

124124
format = format.ToLower();
125125

126126
return format switch
127127
{
128-
"t" => (Number.HasValue ? string.IsNullOrEmpty(Name) ? $"{Number}" : $"{Name}.{Number}" : Name ?? string.Empty),
128+
"t" => (Number.HasValue ? Name.IsNullOrEmpty() ? $"{Number}" : $"{Name}.{Number}" : Name ?? string.Empty),
129129
_ => throw new FormatException($"Unknown format '{format}'.")
130130
};
131131
}
132132

133-
public bool HasTag() => !string.IsNullOrEmpty(Name) || (Number.HasValue && PromotedFromCommits != true);
133+
public bool HasTag() =>
134+
!Name.IsNullOrEmpty() || (Number.HasValue && PromotedFromCommits != true);
134135
}

0 commit comments

Comments
 (0)