Skip to content

Commit 6d0ecd0

Browse files
committed
Fix findings, found while investigating the build error
1 parent bc6f7bf commit 6d0ecd0

File tree

4 files changed

+61
-13
lines changed

4 files changed

+61
-13
lines changed

GitVersion.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
workflow: GitFlow/v1
12
assembly-versioning-scheme: MajorMinorPatch
3+
label:
24
branches:
35
main:
4-
label: beta
6+
label:
57
support:
6-
label: beta
8+
label:

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,4 +1364,42 @@ public void UnversionedHotfix()
13641364

13651365
fixture.AssertFullSemver("1.2.1-3", configuration);
13661366
}
1367+
1368+
[Test]
1369+
public void AlternativeSemanticVersionsShouldBeConsidered()
1370+
{
1371+
var configuration = GitFlowConfigurationBuilder.New.Build();
1372+
1373+
using EmptyRepositoryFixture fixture = new("main");
1374+
1375+
fixture.MakeACommit("A");
1376+
fixture.MakeATaggedCommit("4.0.0-beta.14");
1377+
fixture.MakeACommit("B");
1378+
1379+
fixture.AssertFullSemver("4.0.0-3", configuration);
1380+
}
1381+
1382+
[TestCase(null, "6.0.0-beta.6")]
1383+
[TestCase("beta", "6.0.0-beta.21")]
1384+
public void AlternativeSemanticVersionsShouldBeConsidered(string? labelOnMain, string version)
1385+
{
1386+
var configuration = GitFlowConfigurationBuilder.New
1387+
.WithLabel(null)
1388+
.WithBranch("main", _ => _.WithLabel(labelOnMain))
1389+
.Build();
1390+
1391+
using EmptyRepositoryFixture fixture = new("main");
1392+
1393+
fixture.MakeATaggedCommit("1.0.0");
1394+
fixture.MakeATaggedCommit("4.0.0-beta.14");
1395+
fixture.MakeACommit("A");
1396+
fixture.MakeATaggedCommit("6.0.0-alpha.1");
1397+
fixture.MakeATaggedCommit("6.0.0-alpha.2");
1398+
fixture.MakeATaggedCommit("6.0.0-alpha.3");
1399+
fixture.MakeACommit("B");
1400+
fixture.MakeATaggedCommit("6.0.0-beta.5");
1401+
fixture.MakeACommit("C");
1402+
1403+
fixture.AssertFullSemver(version, configuration);
1404+
}
13671405
}

src/GitVersion.Core/VersionCalculation/VersionCalculators/NextVersionCalculator.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,19 +162,22 @@ private NextVersion CalculateNextVersion(IBranch branch, IGitVersionConfiguratio
162162

163163
var maxVersion = nextVersions.Max()
164164
?? throw new GitVersionException("No base versions determined on the current branch.");
165-
var matchingVersionsOnceIncremented = nextVersions
166-
.Where(v => v.BaseVersion.BaseVersionSource != null && v.IncrementedVersion == maxVersion.IncrementedVersion)
167-
.ToList();
165+
168166
ICommit? latestBaseVersionSource;
169167

170-
if (matchingVersionsOnceIncremented.Count != 0)
168+
var matchingVersionsOnceIncremented = nextVersions
169+
.Where(
170+
element => element.BaseVersion.BaseVersionSource != null
171+
&& element.IncrementedVersion == maxVersion.IncrementedVersion
172+
).ToArray();
173+
if (matchingVersionsOnceIncremented.Length > 1)
171174
{
172175
var latestVersion = matchingVersionsOnceIncremented.Aggregate(CompareVersions);
173176
latestBaseVersionSource = latestVersion.BaseVersion.BaseVersionSource;
174177
maxVersion = latestVersion;
175178
log.Info(
176179
$"Found multiple base versions which will produce the same SemVer ({maxVersion.IncrementedVersion}), " +
177-
$"taking oldest source for commit counting ({latestVersion.BaseVersion.Source})");
180+
$"taking latest source for commit counting ({latestVersion.BaseVersion.Source})");
178181
}
179182
else
180183
{

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,16 @@ private IEnumerable<BaseVersion> GetBaseVersionsInternal(EffectiveBranchConfigur
4040
).SelectMany(elements => elements).Distinct().ToArray();
4141

4242
var label = configuration.Value.GetBranchSpecificLabel(Context.CurrentBranch.Name, null);
43-
var maxTaggedSemanticVersion = taggedSemanticVersions
44-
.Where(element => !element.Value.IsMatchForBranchSpecificLabel(label))
45-
.Max();
4643

47-
var semanticVersionsWithTag = taggedSemanticVersions.Where(element => element.Value.IsMatchForBranchSpecificLabel(label));
48-
foreach (var semanticVersionWithTag in semanticVersionsWithTag)
44+
List<SemanticVersionWithTag> alternativeSemanticVersionsWithTag = new();
45+
foreach (var semanticVersionWithTag in taggedSemanticVersions)
4946
{
47+
if (!semanticVersionWithTag.Value.IsMatchForBranchSpecificLabel(label))
48+
{
49+
alternativeSemanticVersionsWithTag.Add(semanticVersionWithTag);
50+
continue;
51+
}
52+
5053
var baseVersionSource = semanticVersionWithTag.Tag.Commit;
5154
var increment = incrementStrategyFinder.DetermineIncrementedField(
5255
currentCommit: Context.CurrentCommit,
@@ -55,6 +58,7 @@ private IEnumerable<BaseVersion> GetBaseVersionsInternal(EffectiveBranchConfigur
5558
configuration: configuration.Value,
5659
label: label
5760
);
61+
5862
yield return new BaseVersion(
5963
$"Git tag '{semanticVersionWithTag.Tag.Name.Friendly}'", semanticVersionWithTag.Value, baseVersionSource)
6064
{
@@ -63,9 +67,10 @@ private IEnumerable<BaseVersion> GetBaseVersionsInternal(EffectiveBranchConfigur
6367
Increment = increment,
6468
ForceIncrement = false,
6569
Label = label,
66-
AlternativeSemanticVersion = maxTaggedSemanticVersion?.Value
70+
AlternativeSemanticVersion = alternativeSemanticVersionsWithTag.Max()?.Value
6771
}
6872
};
73+
alternativeSemanticVersionsWithTag.Clear();
6974
}
7075
}
7176
}

0 commit comments

Comments
 (0)