Skip to content

Commit 369fa11

Browse files
Andy Furnissarturcic
Andy Furniss
authored andcommitted
Ignore versions with PreRelease tags when getting base version in mainline mode.
1 parent 68db413 commit 369fa11

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

src/GitVersionCore.Tests/VersionCalculation/BaseVersionCalculatorTests.cs

+39
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,45 @@ public void ShouldFilterVersion()
133133
baseVersion.SemanticVersion.ShouldBe(lowerVersion.SemanticVersion);
134134
}
135135

136+
[Test]
137+
public void ShouldIgnorePreReleaseVersionInMainlineMode()
138+
{
139+
var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude());
140+
141+
var lowerVersion = new BaseVersion("dummy", false, new SemanticVersion(1), new MockCommit(), null);
142+
var preReleaseVersion = new BaseVersion(
143+
"prerelease",
144+
false,
145+
new SemanticVersion(1, 0, 1)
146+
{
147+
PreReleaseTag = new SemanticVersionPreReleaseTag
148+
{
149+
Name = "alpha",
150+
Number = 1
151+
}
152+
},
153+
new MockCommit(),
154+
null
155+
);
156+
157+
var versionCalculator = GetBaseVersionCalculator(contextBuilder =>
158+
{
159+
contextBuilder
160+
.WithConfig(new Config { VersioningMode = VersioningMode.Mainline, Ignore = fakeIgnoreConfig })
161+
.OverrideServices(services =>
162+
{
163+
services.RemoveAll<IVersionStrategy>();
164+
services.AddSingleton<IVersionStrategy>(new TestVersionStrategy(preReleaseVersion, lowerVersion));
165+
});
166+
});
167+
var baseVersion = versionCalculator.GetBaseVersion();
168+
169+
baseVersion.Source.ShouldNotBe(preReleaseVersion.Source);
170+
baseVersion.SemanticVersion.ShouldNotBe(preReleaseVersion.SemanticVersion);
171+
baseVersion.Source.ShouldBe(lowerVersion.Source);
172+
baseVersion.SemanticVersion.ShouldBe(lowerVersion.SemanticVersion);
173+
}
174+
136175
private static IBaseVersionCalculator GetBaseVersionCalculator(Action<GitVersionContextBuilder> contextBuilderAction)
137176
{
138177
var contextBuilder = new GitVersionContextBuilder();

src/GitVersionCore.Tests/VersionCalculation/NextVersionCalculatorTests.cs

+23
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,29 @@ public void MergeIntoMainline()
154154
fixture.AssertFullSemver("1.0.0", config);
155155
}
156156

157+
[Test]
158+
public void MergeFeatureIntoMainline()
159+
{
160+
var config = new Config
161+
{
162+
VersioningMode = VersioningMode.Mainline
163+
};
164+
165+
using var fixture = new EmptyRepositoryFixture();
166+
fixture.MakeACommit();
167+
fixture.ApplyTag("1.0.0");
168+
fixture.AssertFullSemver("1.0.0", config);
169+
170+
fixture.BranchTo("feature/foo");
171+
fixture.MakeACommit();
172+
fixture.AssertFullSemver("1.0.1-foo.1", config);
173+
fixture.ApplyTag("1.0.1-foo.1");
174+
175+
fixture.Checkout("master");
176+
fixture.MergeNoFF("feature/foo");
177+
fixture.AssertFullSemver("1.0.1", config);
178+
}
179+
157180
[Test]
158181
public void PreReleaseTagCanUseBranchNameVariable()
159182
{

src/GitVersionCore/VersionCalculation/BaseVersionCalculator.cs

+13-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,19 @@ public BaseVersion GetBaseVersion()
6060
.ToList();
6161

6262
FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(baseVersions);
63-
var maxVersion = baseVersions.Aggregate((v1, v2) => v1.IncrementedVersion > v2.IncrementedVersion ? v1 : v2);
63+
64+
Versions maxVersion;
65+
if (context.Configuration.VersioningMode == VersioningMode.Mainline)
66+
{
67+
maxVersion = baseVersions
68+
.Where(b => !b.IncrementedVersion.PreReleaseTag.HasTag())
69+
.Aggregate((v1, v2) => v1.IncrementedVersion > v2.IncrementedVersion ? v1 : v2);
70+
}
71+
else
72+
{
73+
maxVersion = baseVersions.Aggregate((v1, v2) => v1.IncrementedVersion > v2.IncrementedVersion ? v1 : v2);
74+
}
75+
6476
var matchingVersionsOnceIncremented = baseVersions
6577
.Where(b => b.Version.BaseVersionSource != null && b.IncrementedVersion == maxVersion.IncrementedVersion)
6678
.ToList();

0 commit comments

Comments
 (0)