Skip to content

Commit fbe89d7

Browse files
committed
refactors reference name extensions
Refactors the `ReferenceNameExtensions` to use extension methods for improved code organization.
1 parent ea95b5b commit fbe89d7

File tree

3 files changed

+38
-36
lines changed

3 files changed

+38
-36
lines changed
Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,57 @@
11
using GitVersion.Core;
22
using GitVersion.Extensions;
33
using GitVersion.Git;
4+
using SemanticVersionResult = (GitVersion.SemanticVersion Value, string? Name);
45

56
namespace GitVersion.Configuration;
67

78
public static class ReferenceNameExtensions
89
{
9-
public static bool TryGetSemanticVersion(this ReferenceName source, EffectiveConfiguration configuration, out (SemanticVersion Value, string? Name) result)
10-
=> source.TryGetSemanticVersion(configuration.VersionInBranchPattern, configuration.TagPrefixPattern, configuration.SemanticVersionFormat, out result);
11-
12-
public static bool TryGetSemanticVersion(this ReferenceName source, IGitVersionConfiguration configuration, out (SemanticVersion Value, string? Name) result)
13-
=> source.TryGetSemanticVersion(configuration.VersionInBranchPattern, configuration.TagPrefixPattern, configuration.SemanticVersionFormat, out result);
14-
15-
private static bool TryGetSemanticVersion(this ReferenceName referenceName,
16-
string? versionPatternPattern,
17-
string? tagPrefix,
18-
SemanticVersionFormat format, out (SemanticVersion Value, string? Name) result)
10+
extension(ReferenceName source)
1911
{
20-
var versionPatternRegex = RegexPatterns.Cache.GetOrAdd(GetVersionInBranchPattern(versionPatternPattern));
21-
result = default;
12+
public bool TryGetSemanticVersion(EffectiveConfiguration configuration, out SemanticVersionResult result)
13+
=> source.TryGetSemanticVersion(configuration.VersionInBranchPattern, configuration.TagPrefixPattern, configuration.SemanticVersionFormat, out result);
14+
15+
public bool TryGetSemanticVersion(IGitVersionConfiguration configuration, out SemanticVersionResult result)
16+
=> source.TryGetSemanticVersion(configuration.VersionInBranchPattern, configuration.TagPrefixPattern, configuration.SemanticVersionFormat, out result);
2217

23-
var length = 0;
24-
foreach (var branchPart in referenceName.WithoutOrigin.Split(GetBranchSeparator()))
18+
private bool TryGetSemanticVersion(string? versionPatternPattern,
19+
string? tagPrefix,
20+
SemanticVersionFormat format, out SemanticVersionResult result)
2521
{
26-
if (string.IsNullOrEmpty(branchPart)) return false;
22+
var versionPatternRegex = RegexPatterns.Cache.GetOrAdd(GetVersionInBranchPattern(versionPatternPattern));
23+
result = default;
2724

28-
var match = versionPatternRegex.Match(branchPart);
29-
if (match.Success)
25+
var length = 0;
26+
foreach (var branchPart in source.WithoutOrigin.Split(GetBranchSeparator()))
3027
{
31-
var versionPart = match.Groups["version"].Value;
32-
if (SemanticVersion.TryParse(versionPart, tagPrefix, out var semanticVersion, format))
28+
if (string.IsNullOrEmpty(branchPart)) return false;
29+
30+
var match = versionPatternRegex.Match(branchPart);
31+
if (match.Success)
3332
{
34-
length += versionPart.Length;
35-
var name = referenceName.WithoutOrigin[length..].Trim('-');
36-
result = new(semanticVersion, name.Length == 0 ? null : name);
37-
return true;
33+
var versionPart = match.Groups["version"].Value;
34+
if (SemanticVersion.TryParse(versionPart, tagPrefix, out var semanticVersion, format))
35+
{
36+
length += versionPart.Length;
37+
var name = source.WithoutOrigin[length..].Trim('-');
38+
result = new(semanticVersion, name.Length == 0 ? null : name);
39+
return true;
40+
}
3841
}
39-
}
4042

41-
length += branchPart.Length + 1;
42-
}
43+
length += branchPart.Length + 1;
44+
}
4345

44-
return false;
46+
return false;
4547

46-
char GetBranchSeparator() => referenceName.WithoutOrigin.Contains('/') || !referenceName.WithoutOrigin.Contains('-') ? '/' : '-';
48+
char GetBranchSeparator() => source.WithoutOrigin.Contains('/') || !source.WithoutOrigin.Contains('-') ? '/' : '-';
4749

48-
static string GetVersionInBranchPattern(string? versionInBranchPattern)
49-
{
50-
if (versionInBranchPattern.IsNullOrEmpty()) versionInBranchPattern = RegexPatterns.Configuration.DefaultVersionInBranchRegexPattern;
51-
return $"^{versionInBranchPattern.TrimStart('^')}";
50+
static string GetVersionInBranchPattern(string? versionInBranchPattern)
51+
{
52+
if (versionInBranchPattern.IsNullOrEmpty()) versionInBranchPattern = RegexPatterns.Configuration.DefaultVersionInBranchRegexPattern;
53+
return $"^{versionInBranchPattern.TrimStart('^')}";
54+
}
5255
}
5356
}
5457
}

src/GitVersion.Core/PublicAPI.Shipped.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ GitVersion.Configuration.EffectiveConfiguration.PreventIncrementWhenBranchMerged
8484
GitVersion.Configuration.EffectiveConfiguration.PreventIncrementWhenCurrentCommitTagged.get -> bool
8585
GitVersion.Configuration.EffectiveConfiguration.RegularExpression.get -> string?
8686
GitVersion.Configuration.EffectiveConfiguration.SemanticVersionFormat.get -> GitVersion.SemanticVersionFormat
87-
GitVersion.Configuration.EffectiveConfiguration.TagPrefix.get -> string?
8887
GitVersion.Configuration.EffectiveConfiguration.TagPreReleaseWeight.get -> int
8988
GitVersion.Configuration.EffectiveConfiguration.TrackMergeMessage.get -> bool
9089
GitVersion.Configuration.EffectiveConfiguration.TrackMergeTarget.get -> bool
@@ -802,8 +801,6 @@ static GitVersion.Configuration.EffectiveBranchConfiguration.operator !=(GitVers
802801
static GitVersion.Configuration.EffectiveBranchConfiguration.operator ==(GitVersion.Configuration.EffectiveBranchConfiguration? left, GitVersion.Configuration.EffectiveBranchConfiguration? right) -> bool
803802
static GitVersion.Configuration.EffectiveConfiguration.operator !=(GitVersion.Configuration.EffectiveConfiguration? left, GitVersion.Configuration.EffectiveConfiguration? right) -> bool
804803
static GitVersion.Configuration.EffectiveConfiguration.operator ==(GitVersion.Configuration.EffectiveConfiguration? left, GitVersion.Configuration.EffectiveConfiguration? right) -> bool
805-
static GitVersion.Configuration.ReferenceNameExtensions.TryGetSemanticVersion(this GitVersion.Git.ReferenceName! source, out (GitVersion.SemanticVersion! Value, string? Name) result, GitVersion.Configuration.EffectiveConfiguration! configuration) -> bool
806-
static GitVersion.Configuration.ReferenceNameExtensions.TryGetSemanticVersion(this GitVersion.Git.ReferenceName! source, out (GitVersion.SemanticVersion! Value, string? Name) result, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> bool
807804
static GitVersion.ConfigurationInfo.operator !=(GitVersion.ConfigurationInfo? left, GitVersion.ConfigurationInfo? right) -> bool
808805
static GitVersion.ConfigurationInfo.operator ==(GitVersion.ConfigurationInfo? left, GitVersion.ConfigurationInfo? right) -> bool
809806
static GitVersion.Extensions.AssemblyVersionsGeneratorExtensions.GetAssemblyFileVersion(this GitVersion.SemanticVersion! sv, GitVersion.Configuration.AssemblyFileVersioningScheme scheme) -> string?

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
#nullable enable
22
GitVersion.Configuration.EffectiveConfiguration.TagPrefixPattern.get -> string?
3+
GitVersion.Configuration.ReferenceNameExtensions.extension(GitVersion.Git.ReferenceName!)
4+
GitVersion.Configuration.ReferenceNameExtensions.extension(GitVersion.Git.ReferenceName!).TryGetSemanticVersion(GitVersion.Configuration.EffectiveConfiguration! configuration, out (GitVersion.SemanticVersion! Value, string? Name) result) -> bool
5+
GitVersion.Configuration.ReferenceNameExtensions.extension(GitVersion.Git.ReferenceName!).TryGetSemanticVersion(GitVersion.Configuration.IGitVersionConfiguration! configuration, out (GitVersion.SemanticVersion! Value, string? Name) result) -> bool
36
GitVersion.Extensions.AssemblyVersionsGeneratorExtensions.extension(GitVersion.SemanticVersion!)
47
GitVersion.Extensions.AssemblyVersionsGeneratorExtensions.extension(GitVersion.SemanticVersion!).GetAssemblyFileVersion(GitVersion.Configuration.AssemblyFileVersioningScheme scheme) -> string?
58
GitVersion.Extensions.AssemblyVersionsGeneratorExtensions.extension(GitVersion.SemanticVersion!).GetAssemblyVersion(GitVersion.Configuration.AssemblyVersioningScheme scheme) -> string?
@@ -43,7 +46,6 @@ GitVersion.Logging.LogExtensions.extension(GitVersion.Logging.ILog!).Warning(Git
4346
GitVersion.Logging.LogExtensions.extension(GitVersion.Logging.ILog!).Warning(GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void
4447
GitVersion.Logging.LogExtensions.extension(GitVersion.Logging.ILog!).Warning(GitVersion.Logging.Verbosity verbosity, string! format, params object?[]! args) -> void
4548
GitVersion.Logging.LogExtensions.extension(GitVersion.Logging.ILog!).Warning(string! format, params object?[]! args) -> void
46-
static GitVersion.Configuration.ReferenceNameExtensions.TryGetSemanticVersion(this GitVersion.Git.ReferenceName! referenceName, string? versionPatternPattern, string? tagPrefix, GitVersion.SemanticVersionFormat format, out (GitVersion.SemanticVersion! Value, string? Name) result) -> bool
4749
static GitVersion.Configuration.ReferenceNameExtensions.TryGetSemanticVersion(this GitVersion.Git.ReferenceName! source, GitVersion.Configuration.EffectiveConfiguration! configuration, out (GitVersion.SemanticVersion! Value, string? Name) result) -> bool
4850
static GitVersion.Configuration.ReferenceNameExtensions.TryGetSemanticVersion(this GitVersion.Git.ReferenceName! source, GitVersion.Configuration.IGitVersionConfiguration! configuration, out (GitVersion.SemanticVersion! Value, string? Name) result) -> bool
4951
static GitVersion.Extensions.FileSystemExtensions.FindGitDir(this System.IO.Abstractions.IFileSystem! fileSystem, string? path) -> (string! GitDirectory, string! WorkingTreeDirectory)?

0 commit comments

Comments
 (0)