Skip to content

Commit 4eed0c6

Browse files
committed
#3341 - make sure to forward correctly the SemverVersionFormat
1 parent a516965 commit 4eed0c6

File tree

9 files changed

+44
-43
lines changed

9 files changed

+44
-43
lines changed

src/GitVersion.Core/Configuration/Init/SetNextVersion.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ protected override StepResult HandleResult(string? result, Queue<ConfigInitWizar
1919
return StepResult.Ok();
2020
}
2121

22-
if (!SemanticVersion.TryParse(result, string.Empty, out var semVer))
22+
if (!SemanticVersion.TryParse(result, string.Empty, out var semVer, configuration.SemanticVersionFormat))
2323
return StepResult.InvalidResponseSelected();
2424

2525
configuration.NextVersion = semVer.ToString("t");

src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ public interface IRepositoryStore
3838

3939
IEnumerable<IBranch> GetSourceBranches(IBranch branch, GitVersionConfiguration configuration, IEnumerable<IBranch> excludedBranches);
4040

41-
SemanticVersion? GetCurrentCommitTaggedVersion(ICommit? commit, string? tagPrefix, bool handleDetachedBranch);
41+
SemanticVersion? GetCurrentCommitTaggedVersion(ICommit? commit, string? tagPrefix, SemanticVersionFormat versionFormat, bool handleDetachedBranch);
4242

43-
IEnumerable<SemanticVersion> GetVersionTagsOnBranch(IBranch branch, string? tagPrefixRegex);
44-
IEnumerable<(ITag Tag, SemanticVersion Semver, ICommit Commit)> GetValidVersionTags(string? tagPrefixRegex, DateTimeOffset? olderThan = null);
43+
IEnumerable<SemanticVersion> GetVersionTagsOnBranch(IBranch branch, string? tagPrefixRegex, SemanticVersionFormat versionFormat);
44+
IEnumerable<(ITag Tag, SemanticVersion Semver, ICommit Commit)> GetValidVersionTags(string? tagPrefixRegex, SemanticVersionFormat versionFormat, DateTimeOffset? olderThan = null);
4545

4646
bool IsCommitOnBranch(ICommit? baseVersionSource, IBranch branch, ICommit firstMatchingCommit);
4747

src/GitVersion.Core/Core/GitVersionContextFactory.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public GitVersionContext Create(GitVersionOptions gitVersionOptions)
3333
currentBranch = branchForCommit ?? currentBranch;
3434
}
3535

36-
var currentCommitTaggedVersion = this.repositoryStore.GetCurrentCommitTaggedVersion(currentCommit, configuration.LabelPrefix, handleDetachedBranch: currentBranch.IsDetachedHead);
36+
var currentCommitTaggedVersion = this.repositoryStore.GetCurrentCommitTaggedVersion(currentCommit, configuration.LabelPrefix, configuration.SemanticVersionFormat, handleDetachedBranch: currentBranch.IsDetachedHead);
3737
var numberOfUncommittedChanges = this.repositoryStore.GetNumberOfUncommittedChanges();
3838

3939
return new GitVersionContext(currentBranch, currentCommit, configuration, currentCommitTaggedVersion, numberOfUncommittedChanges);

src/GitVersion.Core/Core/RepositoryStore.cs

+10-10
Original file line numberDiff line numberDiff line change
@@ -219,24 +219,24 @@ public IEnumerable<BranchCommit> FindCommitBranchesWasBranchedFrom(IBranch branc
219219
}
220220
}
221221

222-
public SemanticVersion? GetCurrentCommitTaggedVersion(ICommit? commit, string? tagPrefix, bool handleDetachedBranch)
222+
public SemanticVersion? GetCurrentCommitTaggedVersion(ICommit? commit, string? tagPrefix, SemanticVersionFormat versionFormat, bool handleDetachedBranch)
223223
=> this.repository.Tags
224-
.SelectMany(t => GetCurrentCommitSemanticVersions(commit, tagPrefix, t, handleDetachedBranch))
224+
.SelectMany(tag => GetCurrentCommitSemanticVersions(commit, tagPrefix, tag, versionFormat, handleDetachedBranch))
225225
.Max();
226226

227-
public IEnumerable<SemanticVersion> GetVersionTagsOnBranch(IBranch branch, string? tagPrefixRegex)
227+
public IEnumerable<SemanticVersion> GetVersionTagsOnBranch(IBranch branch, string? tagPrefixRegex, SemanticVersionFormat versionFormat)
228228
{
229229
branch = branch.NotNull();
230230

231-
if (this.semanticVersionTagsOnBranchCache.ContainsKey(branch))
231+
if (this.semanticVersionTagsOnBranchCache.TryGetValue(branch, out var onBranch))
232232
{
233233
this.log.Debug($"Cache hit for version tags on branch '{branch.Name.Canonical}");
234-
return this.semanticVersionTagsOnBranchCache[branch];
234+
return onBranch;
235235
}
236236

237237
using (this.log.IndentLog($"Getting version tags from branch '{branch.Name.Canonical}'."))
238238
{
239-
var tags = GetValidVersionTags(tagPrefixRegex);
239+
var tags = GetValidVersionTags(tagPrefixRegex, versionFormat);
240240
var tagsBySha = tags.Where(t => t.Tag.TargetSha != null).ToLookup(t => t.Tag.TargetSha, t => t);
241241

242242
var versionTags = (branch.Commits?.SelectMany(c => tagsBySha[c.Sha].Select(t => t.Semver)) ?? Enumerable.Empty<SemanticVersion>()).ToList();
@@ -246,13 +246,13 @@ public IEnumerable<SemanticVersion> GetVersionTagsOnBranch(IBranch branch, strin
246246
}
247247
}
248248

249-
public IEnumerable<(ITag Tag, SemanticVersion Semver, ICommit Commit)> GetValidVersionTags(string? tagPrefixRegex, DateTimeOffset? olderThan = null)
249+
public IEnumerable<(ITag Tag, SemanticVersion Semver, ICommit Commit)> GetValidVersionTags(string? tagPrefixRegex, SemanticVersionFormat versionFormat, DateTimeOffset? olderThan = null)
250250
{
251251
var tags = new List<(ITag, SemanticVersion, ICommit)>();
252252

253253
foreach (var tag in this.repository.Tags)
254254
{
255-
if (!SemanticVersion.TryParse(tag.Name.Friendly, tagPrefixRegex, out var semver))
255+
if (!SemanticVersion.TryParse(tag.Name.Friendly, tagPrefixRegex, out var semver, versionFormat))
256256
continue;
257257

258258
var commit = tag.PeeledTargetCommit();
@@ -290,7 +290,7 @@ public bool IsCommitOnBranch(ICommit? baseVersionSource, IBranch branch, ICommit
290290
private static bool IsReleaseBranch(INamedReference branch, IEnumerable<KeyValuePair<string, BranchConfiguration>> releaseBranchConfig)
291291
=> releaseBranchConfig.Any(c => c.Value?.Regex != null && Regex.IsMatch(branch.Name.Friendly, c.Value.Regex));
292292

293-
private IEnumerable<SemanticVersion> GetCurrentCommitSemanticVersions(ICommit? commit, string? tagPrefix, ITag tag, bool handleDetachedBranch)
293+
private IEnumerable<SemanticVersion> GetCurrentCommitSemanticVersions(ICommit? commit, string? tagPrefix, ITag tag, SemanticVersionFormat versionFormat, bool handleDetachedBranch)
294294
{
295295
if (commit == null)
296296
return Array.Empty<SemanticVersion>();
@@ -303,7 +303,7 @@ private IEnumerable<SemanticVersion> GetCurrentCommitSemanticVersions(ICommit? c
303303

304304
var tagName = tag.Name.Friendly;
305305

306-
return Equals(targetCommit, commitToCompare) && SemanticVersion.TryParse(tagName, tagPrefix, out var version)
306+
return Equals(targetCommit, commitToCompare) && SemanticVersion.TryParse(tagName, tagPrefix, out var version, versionFormat)
307307
? new[] { version }
308308
: Array.Empty<SemanticVersion>();
309309
}

src/GitVersion.Core/MergeMessage.cs

+17-17
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,25 @@ public MergeMessage(string? mergeMessage, GitVersionConfiguration configuration)
2929
foreach (var format in allFormats)
3030
{
3131
var match = format.Pattern.Match(mergeMessage);
32-
if (match.Success)
33-
{
34-
FormatName = format.Name;
35-
MergedBranch = match.Groups["SourceBranch"].Value;
36-
37-
if (match.Groups["TargetBranch"].Success)
38-
{
39-
TargetBranch = match.Groups["TargetBranch"].Value;
40-
}
32+
if (!match.Success)
33+
continue;
4134

42-
if (int.TryParse(match.Groups["PullRequestNumber"].Value, out var pullNumber))
43-
{
44-
PullRequestNumber = pullNumber;
45-
}
35+
FormatName = format.Name;
36+
MergedBranch = match.Groups["SourceBranch"].Value;
4637

47-
Version = ParseVersion(configuration.LabelPrefix);
38+
if (match.Groups["TargetBranch"].Success)
39+
{
40+
TargetBranch = match.Groups["TargetBranch"].Value;
41+
}
4842

49-
break;
43+
if (int.TryParse(match.Groups["PullRequestNumber"].Value, out var pullNumber))
44+
{
45+
PullRequestNumber = pullNumber;
5046
}
47+
48+
Version = ParseVersion(configuration.LabelPrefix, configuration.SemanticVersionFormat);
49+
50+
break;
5151
}
5252
}
5353

@@ -58,7 +58,7 @@ public MergeMessage(string? mergeMessage, GitVersionConfiguration configuration)
5858
public int? PullRequestNumber { get; }
5959
public SemanticVersion? Version { get; }
6060

61-
private SemanticVersion? ParseVersion(string? tagPrefix)
61+
private SemanticVersion? ParseVersion(string? tagPrefix, SemanticVersionFormat versionFormat)
6262
{
6363
if (tagPrefix is null)
6464
return null;
@@ -69,7 +69,7 @@ public MergeMessage(string? mergeMessage, GitVersionConfiguration configuration)
6969
var versionMatch = new Regex(@"^(?<!://)\d+\.\d+(\.*\d+)*");
7070
var version = versionMatch.Match(toMatch);
7171

72-
if (version.Success && SemanticVersion.TryParse(version.Value, tagPrefix, out var val))
72+
if (version.Success && SemanticVersion.TryParse(version.Value, tagPrefix, out var val, versionFormat))
7373
{
7474
return val;
7575
}

src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ internal IEnumerable<BaseVersion> GetTaggedVersions(IBranch currentBranch, DateT
2323
{
2424
if (currentBranch is null)
2525
return Enumerable.Empty<BaseVersion>();
26-
var versionTags = this.repositoryStore.GetValidVersionTags(Context.Configuration.LabelPrefix, olderThan);
27-
var versionTagsByCommit = versionTags.ToLookup(vt => vt.Item3.Id.Sha);
26+
var versionTags = this.repositoryStore.GetValidVersionTags(Context.Configuration.LabelPrefix, Context.Configuration.SemanticVersionFormat, olderThan);
27+
var versionTagsByCommit = versionTags.ToLookup(vt => vt.Commit.Id.Sha);
2828
var commitsOnBranch = currentBranch.Commits;
2929
if (commitsOnBranch == null)
3030
return Enumerable.Empty<BaseVersion>();
3131

3232
var versionTagsOnBranch = commitsOnBranch.SelectMany(commit => versionTagsByCommit[commit.Id.Sha]);
33-
var versionTaggedCommits = versionTagsOnBranch.Select(t => new VersionTaggedCommit(t.Item3, t.Item2, t.Item1.Name.Friendly));
33+
var versionTaggedCommits = versionTagsOnBranch.Select(t => new VersionTaggedCommit(t.Commit, t.Semver, t.Tag.Name.Friendly));
3434
var taggedVersions = versionTaggedCommits.Select(versionTaggedCommit => CreateBaseVersion(Context, versionTaggedCommit)).ToList();
3535
var taggedVersionsOnCurrentCommit = taggedVersions.Where(version => !version.ShouldIncrement).ToList();
3636
return taggedVersionsOnCurrentCommit.Any() ? taggedVersionsOnCurrentCommit : taggedVersions;

src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs

+6-5
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,25 @@ public VersionInBranchNameVersionStrategy(IRepositoryStore repositoryStore, Lazy
1919
public override IEnumerable<BaseVersion> GetBaseVersions(EffectiveBranchConfiguration configuration)
2020
{
2121
string nameWithoutOrigin = NameWithoutOrigin(configuration.Branch);
22-
if (Context.Configuration.IsReleaseBranch(nameWithoutOrigin))
22+
var contextConfiguration = Context.Configuration;
23+
if (contextConfiguration.IsReleaseBranch(nameWithoutOrigin))
2324
{
24-
var versionInBranch = GetVersionInBranch(configuration.Branch.Name.Friendly, Context.Configuration.LabelPrefix);
25+
var versionInBranch = GetVersionInBranch(configuration.Branch.Name.Friendly, contextConfiguration.LabelPrefix, contextConfiguration.SemanticVersionFormat);
2526
if (versionInBranch != null)
2627
{
27-
var commitBranchWasBranchedFrom = this.repositoryStore.FindCommitBranchWasBranchedFrom(configuration.Branch, Context.Configuration);
28+
var commitBranchWasBranchedFrom = this.repositoryStore.FindCommitBranchWasBranchedFrom(configuration.Branch, contextConfiguration);
2829
var branchNameOverride = Context.CurrentBranch.Name.Friendly.RegexReplace("[-/]" + versionInBranch.Item1, string.Empty);
2930
yield return new BaseVersion("Version in branch name", false, versionInBranch.Item2, commitBranchWasBranchedFrom.Commit, branchNameOverride);
3031
}
3132
}
3233
}
3334

34-
private static Tuple<string, SemanticVersion>? GetVersionInBranch(string branchName, string? tagPrefixRegex)
35+
private static Tuple<string, SemanticVersion>? GetVersionInBranch(string branchName, string? tagPrefixRegex, SemanticVersionFormat versionFormat)
3536
{
3637
var branchParts = branchName.Split('/', '-');
3738
foreach (var part in branchParts)
3839
{
39-
if (SemanticVersion.TryParse(part, tagPrefixRegex, out var semanticVersion))
40+
if (SemanticVersion.TryParse(part, tagPrefixRegex, out var semanticVersion, versionFormat))
4041
{
4142
return Tuple.Create(part, semanticVersion);
4243
}

src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ private void UpdatePreReleaseTag(EffectiveBranchConfiguration configuration, Sem
130130

131131
// TODO: Please update the pre release-tag in the IVersionStrategy implementation.
132132
var lastTag = this.repositoryStore
133-
.GetVersionTagsOnBranch(Context.CurrentBranch, Context.Configuration.LabelPrefix)
133+
.GetVersionTagsOnBranch(Context.CurrentBranch, Context.Configuration.LabelPrefix, Context.Configuration.SemanticVersionFormat)
134134
.FirstOrDefault(v => v.PreReleaseTag?.Name?.IsEquivalentTo(tagToUse) == true);
135135

136136
if (lastTag != null && MajorMinorPatchEqual(lastTag, semanticVersion) && lastTag.HasPreReleaseTagWithLabel)

src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersion.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,9 @@ public override int GetHashCode()
133133
return v1.CompareTo(v2) < 0;
134134
}
135135

136-
public static SemanticVersion Parse(string version, string? tagPrefixRegex, SemanticVersionFormat format = SemanticVersionFormat.Strict)
136+
public static SemanticVersion Parse(string version, string? tagPrefixRegex, SemanticVersionFormat versionFormat = SemanticVersionFormat.Strict)
137137
{
138-
if (!TryParse(version, tagPrefixRegex, out var semanticVersion, format))
138+
if (!TryParse(version, tagPrefixRegex, out var semanticVersion, versionFormat))
139139
throw new WarningException($"Failed to parse {version} into a Semantic Version");
140140

141141
return semanticVersion;

0 commit comments

Comments
 (0)