Skip to content

Commit 6baa590

Browse files
committed
The business logic how the pre-release label are created has been changed in NextVersionCalculator::FindVersion and removing the FallbackVersionStrategy and move the logic to the NextVersionCalculator::GetNextVersions.
1 parent fd21d84 commit 6baa590

File tree

6 files changed

+113
-63
lines changed

6 files changed

+113
-63
lines changed

src/GitVersion.Core.Tests/IntegrationTests/OtherScenarios.cs

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public void NoDirtyFlagInCleanRepository()
131131

132132
[TestCase(false, "1.1.0-alpha.2")]
133133
[TestCase(true, "1.2.0-alpha.1")]
134-
public void EnusreTrackMergeTargetStrategyWhichWillLookForTaggedMergecommits(bool trackMergeTarget, string expectedVersion)
134+
public void EnsureTrackMergeTargetStrategyWhichWillLookForTaggedMergecommits(bool trackMergeTarget, string expectedVersion)
135135
{
136136
// * 9daa6ea 53 minutes ago (HEAD -> develop)
137137
// | * 85536f2 55 minutes ago (tag: 1.1.0, main)
@@ -162,4 +162,69 @@ public void EnusreTrackMergeTargetStrategyWhichWillLookForTaggedMergecommits(boo
162162

163163
fixture.Repository.DumpGraph();
164164
}
165+
166+
[TestCase(1)]
167+
[TestCase(2)]
168+
public void EnsurePreReleaseTagLabelWillBeConsideredIfNoLabelIsDefined(long patchNumber)
169+
{
170+
var configuration = GitHubFlowConfigurationBuilder.New
171+
.WithLabel(null)
172+
.WithBranch("main", branchBuilder => branchBuilder
173+
.WithLabel(null).WithIncrement(IncrementStrategy.Patch)
174+
).Build();
175+
176+
using var fixture = new EmptyRepositoryFixture("main");
177+
178+
fixture.MakeACommit();
179+
180+
// ✅ succeeds as expected
181+
fixture.AssertFullSemver("0.0.1+1", configuration);
182+
183+
fixture.ApplyTag($"0.0.{patchNumber}-alpha.1");
184+
185+
// ✅ succeeds as expected
186+
fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.1", configuration);
187+
188+
fixture.MakeACommit();
189+
190+
// ✅ succeeds as expected
191+
fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+1", configuration);
192+
193+
fixture.MakeACommit();
194+
195+
// ✅ succeeds as expected
196+
fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+2", configuration);
197+
198+
fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.1");
199+
200+
// ✅ succeeds as expected
201+
fixture.AssertFullSemver($"0.0.{patchNumber}-beta.1", configuration);
202+
203+
fixture.MakeACommit();
204+
205+
// ✅ succeeds as expected
206+
fixture.AssertFullSemver($"0.0.{patchNumber}-beta.2+1", configuration);
207+
208+
fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.2");
209+
210+
// ✅ succeeds as expected
211+
fixture.AssertFullSemver($"0.0.{patchNumber}-beta.2", configuration);
212+
213+
fixture.MakeACommit();
214+
215+
// ✅ succeeds as expected
216+
fixture.AssertFullSemver($"0.0.{patchNumber}-beta.3+1", configuration);
217+
218+
fixture.ApplyTag($"0.0.{patchNumber}");
219+
220+
// ✅ succeeds as expected
221+
fixture.AssertFullSemver($"0.0.{patchNumber}", configuration);
222+
223+
fixture.MakeACommit();
224+
225+
// ✅ succeeds as expected
226+
fixture.AssertFullSemver($"0.0.{patchNumber + 1}+1", configuration);
227+
228+
fixture.Repository.DumpGraph();
229+
}
165230
}

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@ GitVersion.SemanticVersion.Major -> long
769769
GitVersion.SemanticVersion.Minor -> long
770770
GitVersion.SemanticVersion.Patch -> long
771771
GitVersion.SemanticVersion.PreReleaseTag -> GitVersion.SemanticVersionPreReleaseTag!
772-
GitVersion.SemanticVersion.SemanticVersion(GitVersion.SemanticVersion? semanticVersion) -> void
772+
GitVersion.SemanticVersion.SemanticVersion(GitVersion.SemanticVersion! semanticVersion) -> void
773773
GitVersion.SemanticVersion.SemanticVersion(long major = 0, long minor = 0, long patch = 0) -> void
774774
GitVersion.SemanticVersion.ToString(string! format) -> string!
775775
GitVersion.SemanticVersion.ToString(string? format, System.IFormatProvider? formatProvider) -> string!
@@ -823,15 +823,15 @@ GitVersion.SemanticVersionPreReleaseTag
823823
GitVersion.SemanticVersionPreReleaseTag.CompareTo(GitVersion.SemanticVersionPreReleaseTag? other) -> int
824824
GitVersion.SemanticVersionPreReleaseTag.Equals(GitVersion.SemanticVersionPreReleaseTag? other) -> bool
825825
GitVersion.SemanticVersionPreReleaseTag.HasTag() -> bool
826-
GitVersion.SemanticVersionPreReleaseTag.Name.get -> string?
826+
GitVersion.SemanticVersionPreReleaseTag.Name.get -> string!
827827
GitVersion.SemanticVersionPreReleaseTag.Name.set -> void
828828
GitVersion.SemanticVersionPreReleaseTag.Number.get -> long?
829829
GitVersion.SemanticVersionPreReleaseTag.Number.set -> void
830830
GitVersion.SemanticVersionPreReleaseTag.PromotedFromCommits.get -> bool?
831831
GitVersion.SemanticVersionPreReleaseTag.PromotedFromCommits.set -> void
832832
GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag() -> void
833-
GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag(GitVersion.SemanticVersionPreReleaseTag? preReleaseTag) -> void
834-
GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag(string? name, long? number) -> void
833+
GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag(GitVersion.SemanticVersionPreReleaseTag! preReleaseTag) -> void
834+
GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag(string! name, long? number) -> void
835835
GitVersion.SemanticVersionPreReleaseTag.ToString(string! format) -> string!
836836
GitVersion.SemanticVersionPreReleaseTag.ToString(string? format, System.IFormatProvider? formatProvider) -> string!
837837
GitVersion.SemanticVersionWithTag
@@ -878,8 +878,6 @@ GitVersion.VersionCalculation.ConfigNextVersionVersionStrategy
878878
GitVersion.VersionCalculation.ConfigNextVersionVersionStrategy.ConfigNextVersionVersionStrategy(System.Lazy<GitVersion.GitVersionContext!>! versionContext) -> void
879879
GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder
880880
GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder.EffectiveBranchConfigurationFinder(GitVersion.Logging.ILog! log, GitVersion.Common.IRepositoryStore! repositoryStore) -> void
881-
GitVersion.VersionCalculation.FallbackVersionStrategy
882-
GitVersion.VersionCalculation.FallbackVersionStrategy.FallbackVersionStrategy() -> void
883881
GitVersion.VersionCalculation.IEffectiveBranchConfigurationFinder
884882
GitVersion.VersionCalculation.IEffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable<GitVersion.Configuration.EffectiveBranchConfiguration!>!
885883
GitVersion.VersionCalculation.IIncrementStrategyFinder
@@ -1226,6 +1224,5 @@ virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeTarget
12261224
virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTracksReleaseBranches(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder!
12271225
virtual GitVersion.Configuration.BranchConfigurationBuilder.WithVersioningMode(GitVersion.VersionCalculation.VersioningMode? value) -> GitVersion.Configuration.BranchConfigurationBuilder!
12281226
virtual GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable<GitVersion.Configuration.EffectiveBranchConfiguration!>!
1229-
virtual GitVersion.VersionCalculation.FallbackVersionStrategy.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable<GitVersion.VersionCalculation.BaseVersion!>!
12301227
virtual GitVersion.VersionCalculation.NextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion!
12311228
virtual GitVersion.VersionCalculation.TaggedCommitVersionStrategy.FormatSource(GitVersion.SemanticVersionWithTag! semanticVersion) -> string!

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

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public virtual NextVersion FindVersion()
8585
// Will always be 0, don't bother with the +0 on tags
8686
semver.BuildMetaData.CommitsSinceTag = null;
8787
}
88-
else
88+
else if (!string.IsNullOrEmpty(preReleaseTagName))
8989
{
9090
long? number;
9191

@@ -97,15 +97,9 @@ public virtual NextVersion FindVersion()
9797
{
9898
number = 1;
9999
}
100-
101100
semver.PreReleaseTag = new SemanticVersionPreReleaseTag(preReleaseTagName, number);
102101
}
103102

104-
if (string.IsNullOrEmpty(preReleaseTagName))
105-
{
106-
semver.PreReleaseTag = new SemanticVersionPreReleaseTag();
107-
}
108-
109103
return new(semver, baseVersion, new(nextVersion.Branch, nextVersion.Configuration));
110104
}
111105

@@ -209,21 +203,11 @@ IEnumerable<NextVersion> GetNextVersions()
209203
log.Info(baseVersion.ToString());
210204
if (IncludeVersion(baseVersion, configuration.Ignore))
211205
{
212-
var incrementStrategy = incrementStrategyFinder.DetermineIncrementedField(
213-
context: Context,
214-
baseVersion: baseVersion,
215-
configuration: effectiveBranchConfiguration.Value
216-
);
217-
var incrementedVersion = incrementStrategy == VersionField.None
218-
? baseVersion.SemanticVersion
219-
: baseVersion.SemanticVersion.IncrementVersion(incrementStrategy);
220-
221-
if (effectiveBranchConfiguration.Value.VersioningMode == VersioningMode.Mainline)
206+
var incrementedVersion = GetIncrementedVersion(effectiveBranchConfiguration, baseVersion);
207+
if (effectiveBranchConfiguration.Value.VersioningMode == VersioningMode.Mainline
208+
&& incrementedVersion.PreReleaseTag.HasTag())
222209
{
223-
if (incrementedVersion.PreReleaseTag.HasTag())
224-
{
225-
continue;
226-
}
210+
continue;
227211
}
228212

229213
yield return effectiveBranchConfiguration.CreateNextVersion(baseVersion, incrementedVersion);
@@ -235,11 +219,29 @@ IEnumerable<NextVersion> GetNextVersions()
235219

236220
if (!atLeastOneBaseVersionReturned)
237221
{
238-
throw new GitVersionException("No base versions determined on the current branch.");
222+
foreach (var effectiveBranchConfiguration in effectiveBranchConfigurationFinder.GetConfigurations(branch, configuration))
223+
{
224+
var baseVersion = new BaseVersion("Fallback base version", true, new SemanticVersion(), null, null);
225+
var incrementedVersion = GetIncrementedVersion(effectiveBranchConfiguration, baseVersion);
226+
yield return effectiveBranchConfiguration.CreateNextVersion(baseVersion, incrementedVersion);
227+
}
239228
}
240229
}
241230
}
242231

232+
private SemanticVersion GetIncrementedVersion(EffectiveBranchConfiguration effectiveBranchConfiguration, BaseVersion baseVersion)
233+
{
234+
var incrementStrategy = incrementStrategyFinder.DetermineIncrementedField(
235+
context: Context,
236+
baseVersion: baseVersion,
237+
configuration: effectiveBranchConfiguration.Value
238+
);
239+
var incrementedVersion = incrementStrategy == VersionField.None
240+
? baseVersion.SemanticVersion
241+
: baseVersion.SemanticVersion.IncrementVersion(incrementStrategy);
242+
return incrementedVersion;
243+
}
244+
243245
private bool IncludeVersion(BaseVersion baseVersion, IIgnoreConfiguration ignoreConfiguration)
244246
{
245247
foreach (var versionFilter in ignoreConfiguration.ToFilters())

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,16 @@ public SemanticVersion(long major = 0, long minor = 0, long patch = 0)
3535
this.BuildMetaData = new SemanticVersionBuildMetaData();
3636
}
3737

38-
public SemanticVersion(SemanticVersion? semanticVersion)
38+
public SemanticVersion(SemanticVersion semanticVersion)
3939
{
40-
this.Major = semanticVersion?.Major ?? 0;
41-
this.Minor = semanticVersion?.Minor ?? 0;
42-
this.Patch = semanticVersion?.Patch ?? 0;
40+
semanticVersion.NotNull();
4341

44-
this.PreReleaseTag = new SemanticVersionPreReleaseTag(semanticVersion?.PreReleaseTag);
45-
this.BuildMetaData = new SemanticVersionBuildMetaData(semanticVersion?.BuildMetaData);
42+
this.Major = semanticVersion.Major;
43+
this.Minor = semanticVersion.Minor;
44+
this.Patch = semanticVersion.Patch;
45+
46+
this.PreReleaseTag = new SemanticVersionPreReleaseTag(semanticVersion.PreReleaseTag);
47+
this.BuildMetaData = new SemanticVersionBuildMetaData(semanticVersion.BuildMetaData);
4648
}
4749

4850
public bool Equals(SemanticVersion? obj)

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace GitVersion;
77

8-
public class SemanticVersionPreReleaseTag :
8+
public sealed class SemanticVersionPreReleaseTag :
99
IFormattable, IComparable<SemanticVersionPreReleaseTag>, IEquatable<SemanticVersionPreReleaseTag?>
1010
{
1111
private static readonly Regex ParseRegex = new(
@@ -15,24 +15,24 @@ public class SemanticVersionPreReleaseTag :
1515
private static readonly LambdaEqualityHelper<SemanticVersionPreReleaseTag> EqualityHelper =
1616
new(x => x.Name, x => x.Number);
1717

18-
public SemanticVersionPreReleaseTag()
19-
{
20-
}
18+
public SemanticVersionPreReleaseTag() => Name = string.Empty;
2119

22-
public SemanticVersionPreReleaseTag(string? name, long? number)
20+
public SemanticVersionPreReleaseTag(string name, long? number)
2321
{
24-
Name = name;
22+
Name = name.NotNullOrEmpty();
2523
Number = number;
2624
}
2725

28-
public SemanticVersionPreReleaseTag(SemanticVersionPreReleaseTag? preReleaseTag)
26+
public SemanticVersionPreReleaseTag(SemanticVersionPreReleaseTag preReleaseTag)
2927
{
30-
Name = preReleaseTag?.Name;
31-
Number = preReleaseTag?.Number;
32-
PromotedFromCommits = preReleaseTag?.PromotedFromCommits;
28+
preReleaseTag.NotNull();
29+
30+
Name = preReleaseTag.Name;
31+
Number = preReleaseTag.Number;
32+
PromotedFromCommits = preReleaseTag.PromotedFromCommits;
3333
}
3434

35-
public string? Name { get; set; }
35+
public string Name { get; set; }
3636

3737
public long? Number { get; set; }
3838

0 commit comments

Comments
 (0)