Skip to content

Commit 5f7738f

Browse files
committed
refactors regex patterns for performance
Refactors regex patterns to utilize `GeneratedRegexAttribute` caching for improved performance and reduced memory allocation.
1 parent c2485c0 commit 5f7738f

File tree

13 files changed

+449
-120
lines changed

13 files changed

+449
-120
lines changed

src/GitVersion.App/ArgumentParserExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public bool IsValidPath()
4141

4242
public bool IsSwitchArgument()
4343
{
44-
var patternRegex = RegexPatterns.Common.SwitchArgumentRegex();
44+
var patternRegex = RegexPatterns.Common.SwitchArgumentRegex;
4545
return value != null
4646
&& (value.StartsWith('-') || value.StartsWith('/'))
4747
&& !patternRegex.Match(value).Success;

src/GitVersion.Core.Tests/Core/RegexPatternTests.cs

Lines changed: 35 additions & 35 deletions
Large diffs are not rendered by default.

src/GitVersion.Core/Core/RegexPatterns.cs

Lines changed: 380 additions & 51 deletions
Large diffs are not rendered by default.

src/GitVersion.Core/Formatting/StringFormatWithExtension.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public string FormatWith<T>(T? source, IEnvironment environment)
4545
var result = new StringBuilder();
4646
var lastIndex = 0;
4747

48-
foreach (var match in RegexPatterns.Common.ExpandTokensRegex().Matches(template).Cast<Match>())
48+
foreach (var match in RegexPatterns.Common.ExpandTokensRegex.Matches(template).Cast<Match>())
4949
{
5050
var replacement = EvaluateMatch(match, source, environment);
5151
result.Append(template, lastIndex, match.Index - lastIndex);

src/GitVersion.Core/Logging/Log.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public IDisposable IndentLog(string operationDescription)
5858

5959
private string FormatMessage(string message, string level)
6060
{
61-
var obscuredMessage = RegexPatterns.Common.ObscurePasswordRegex().Replace(message, "$1$2:*******@");
61+
var obscuredMessage = RegexPatterns.Common.ObscurePasswordRegex.Replace(message, "$1$2:*******@");
6262
var timestamp = $"{DateTime.Now:yy-MM-dd H:mm:ss:ff}";
6363
return string.Format(CultureInfo.InvariantCulture, "{0}{1} [{2}] {3}", this.currentIndentation, level, timestamp, obscuredMessage);
6464
}

src/GitVersion.Core/MergeMessage.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ public class MergeMessage
1111
{
1212
private static readonly IList<(string Name, Regex Pattern)> DefaultFormats =
1313
[
14-
new("Default", RegexPatterns.MergeMessage.DefaultMergeMessageRegex()),
15-
new("SmartGit", RegexPatterns.MergeMessage.SmartGitMergeMessageRegex()),
16-
new("BitBucketPull", RegexPatterns.MergeMessage.BitBucketPullMergeMessageRegex()),
17-
new("BitBucketPullv7", RegexPatterns.MergeMessage.BitBucketPullv7MergeMessageRegex()),
18-
new("BitBucketCloudPull", RegexPatterns.MergeMessage.BitBucketCloudPullMergeMessageRegex()),
19-
new("GitHubPull", RegexPatterns.MergeMessage.GitHubPullMergeMessageRegex()),
20-
new("RemoteTracking", RegexPatterns.MergeMessage.RemoteTrackingMergeMessageRegex()),
21-
new("AzureDevOpsPull", RegexPatterns.MergeMessage.AzureDevOpsPullMergeMessageRegex())
14+
new("Default", RegexPatterns.MergeMessage.DefaultMergeMessageRegex),
15+
new("SmartGit", RegexPatterns.MergeMessage.SmartGitMergeMessageRegex),
16+
new("BitBucketPull", RegexPatterns.MergeMessage.BitBucketPullMergeMessageRegex),
17+
new("BitBucketPullv7", RegexPatterns.MergeMessage.BitBucketPullv7MergeMessageRegex),
18+
new("BitBucketCloudPull", RegexPatterns.MergeMessage.BitBucketCloudPullMergeMessageRegex),
19+
new("GitHubPull", RegexPatterns.MergeMessage.GitHubPullMergeMessageRegex),
20+
new("RemoteTracking", RegexPatterns.MergeMessage.RemoteTrackingMergeMessageRegex),
21+
new("AzureDevOpsPull", RegexPatterns.MergeMessage.AzureDevOpsPullMergeMessageRegex)
2222
];
2323

2424
public MergeMessage(string mergeMessage, IGitVersionConfiguration configuration)

src/GitVersion.Core/SemVer/SemanticVersion.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public static bool TryParse(string version, string? tagPrefixRegex,
149149

150150
private static bool TryParseStrict(string version, [NotNullWhen(true)] out SemanticVersion? semanticVersion)
151151
{
152-
var parsed = RegexPatterns.SemanticVersion.ParseStrictRegex().Match(version);
152+
var parsed = RegexPatterns.SemanticVersion.ParseStrictRegex.Match(version);
153153

154154
if (!parsed.Success)
155155
{
@@ -171,7 +171,7 @@ private static bool TryParseStrict(string version, [NotNullWhen(true)] out Seman
171171

172172
private static bool TryParseLoose(string version, [NotNullWhen(true)] out SemanticVersion? semanticVersion)
173173
{
174-
var parsed = RegexPatterns.SemanticVersion.ParseLooseRegex().Match(version);
174+
var parsed = RegexPatterns.SemanticVersion.ParseLooseRegex.Match(version);
175175

176176
if (!parsed.Success)
177177
{

src/GitVersion.Core/SemVer/SemanticVersionBuildMetaData.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public static SemanticVersionBuildMetaData Parse(string? buildMetaData)
111111
if (buildMetaData.IsNullOrEmpty())
112112
return Empty;
113113

114-
var parsed = RegexPatterns.SemanticVersion.ParseBuildMetaDataRegex().Match(buildMetaData);
114+
var parsed = RegexPatterns.SemanticVersion.ParseBuildMetaDataRegex.Match(buildMetaData);
115115

116116
long? buildMetaDataCommitsSinceTag = null;
117117
long? buildMetaDataCommitsSinceVersionSource = null;
@@ -147,7 +147,7 @@ public static SemanticVersionBuildMetaData Parse(string? buildMetaData)
147147
private static string FormatMetaDataPart(string value)
148148
{
149149
if (!value.IsNullOrEmpty())
150-
value = RegexPatterns.SemanticVersion.FormatBuildMetaDataRegex().Replace(value, "-");
150+
value = RegexPatterns.SemanticVersion.FormatBuildMetaDataRegex.Replace(value, "-");
151151
return value;
152152
}
153153
}

src/GitVersion.Core/SemVer/SemanticVersionPreReleaseTag.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public static SemanticVersionPreReleaseTag Parse(string? preReleaseTag)
7070
{
7171
if (preReleaseTag.IsNullOrEmpty()) return Empty;
7272

73-
var match = RegexPatterns.SemanticVersion.ParsePreReleaseTagRegex().Match(preReleaseTag);
73+
var match = RegexPatterns.SemanticVersion.ParsePreReleaseTagRegex.Match(preReleaseTag);
7474
if (!match.Success)
7575
{
7676
// TODO check how to log this

src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ public VersionField DetermineIncrementedField(
4949
{
5050
commits.NotNull();
5151

52-
var majorRegex = TryGetRegexOrDefault(configuration.MajorVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultMajorRegex());
53-
var minorRegex = TryGetRegexOrDefault(configuration.MinorVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultMinorRegex());
54-
var patchRegex = TryGetRegexOrDefault(configuration.PatchVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultPatchRegex());
55-
var noBumpRegex = TryGetRegexOrDefault(configuration.NoBumpMessage, RegexPatterns.VersionCalculation.DefaultNoBumpRegex());
52+
var majorRegex = TryGetRegexOrDefault(configuration.MajorVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultMajorRegex);
53+
var minorRegex = TryGetRegexOrDefault(configuration.MinorVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultMinorRegex);
54+
var patchRegex = TryGetRegexOrDefault(configuration.PatchVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultPatchRegex);
55+
var noBumpRegex = TryGetRegexOrDefault(configuration.NoBumpMessage, RegexPatterns.VersionCalculation.DefaultNoBumpRegex);
5656

5757
var increments = commits
5858
.Select(c => GetIncrementFromCommit(c, majorRegex, minorRegex, patchRegex, noBumpRegex))
@@ -209,10 +209,10 @@ public VersionField GetIncrementForcedByCommit(ICommit commit, IGitVersionConfig
209209
commit.NotNull();
210210
configuration.NotNull();
211211

212-
var majorRegex = TryGetRegexOrDefault(configuration.MajorVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultMajorRegex());
213-
var minorRegex = TryGetRegexOrDefault(configuration.MinorVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultMinorRegex());
214-
var patchRegex = TryGetRegexOrDefault(configuration.PatchVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultPatchRegex());
215-
var none = TryGetRegexOrDefault(configuration.NoBumpMessage, RegexPatterns.VersionCalculation.DefaultNoBumpRegex());
212+
var majorRegex = TryGetRegexOrDefault(configuration.MajorVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultMajorRegex);
213+
var minorRegex = TryGetRegexOrDefault(configuration.MinorVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultMinorRegex);
214+
var patchRegex = TryGetRegexOrDefault(configuration.PatchVersionBumpMessage, RegexPatterns.VersionCalculation.DefaultPatchRegex);
215+
var none = TryGetRegexOrDefault(configuration.NoBumpMessage, RegexPatterns.VersionCalculation.DefaultNoBumpRegex);
216216

217217
return GetIncrementFromCommit(commit, majorRegex, minorRegex, patchRegex, none) ?? VersionField.None;
218218
}

0 commit comments

Comments
 (0)