Skip to content

Commit ff447c1

Browse files
committed
Fix tests for main line mode
1 parent 8b32351 commit ff447c1

File tree

6 files changed

+69
-54
lines changed

6 files changed

+69
-54
lines changed

src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ public void ShouldIgnorePreReleaseVersionInMainlineMode()
456456
null
457457
);
458458
var mainlineVersionCalculatorMock = Substitute.For<IMainlineVersionCalculator>();
459-
mainlineVersionCalculatorMock.FindMainlineModeVersion(Arg.Any<BaseVersion>()).Returns(lowerVersion.SemanticVersion);
459+
mainlineVersionCalculatorMock.FindMainlineModeVersion(Arg.Any<NextVersion>()).Returns(lowerVersion.SemanticVersion);
460460
var versionStrategies = new IVersionStrategy[] { new TestVersionStrategy(preReleaseVersion, lowerVersion) };
461461
var unitUnderTest = new NextVersionCalculator(Substitute.For<ILog>(), mainlineVersionCalculatorMock,
462462
repositoryStoreMock, new(context), versionStrategies, effectiveBranchConfigurationFinderMock, incrementStrategyFinderMock);

src/GitVersion.Core.Tests/VersionCalculation/TestMainlineVersionCalculator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class TestMainlineVersionCalculator : IMainlineVersionCalculator
88

99
public TestMainlineVersionCalculator(SemanticVersionBuildMetaData metaData) => this.metaData = metaData;
1010

11-
public SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion) => throw new NotImplementedException();
11+
public SemanticVersion FindMainlineModeVersion(NextVersion nextVersion) => throw new NotImplementedException();
1212

1313
public SemanticVersionBuildMetaData CreateVersionBuildMetaData(ICommit? baseVersionSource) => this.metaData;
1414
}

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,7 @@ GitVersion.VersionCalculation.IIncrementStrategyFinder.DetermineIncrementedField
894894
GitVersion.VersionCalculation.IIncrementStrategyFinder.GetIncrementForCommits(GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable<GitVersion.ICommit!>! commits) -> GitVersion.VersionField?
895895
GitVersion.VersionCalculation.IMainlineVersionCalculator
896896
GitVersion.VersionCalculation.IMainlineVersionCalculator.CreateVersionBuildMetaData(GitVersion.ICommit? baseVersionSource) -> GitVersion.SemanticVersionBuildMetaData!
897-
GitVersion.VersionCalculation.IMainlineVersionCalculator.FindMainlineModeVersion(GitVersion.VersionCalculation.BaseVersion! baseVersion) -> GitVersion.SemanticVersion!
897+
GitVersion.VersionCalculation.IMainlineVersionCalculator.FindMainlineModeVersion(GitVersion.VersionCalculation.NextVersion! nextVersion) -> GitVersion.SemanticVersion!
898898
GitVersion.VersionCalculation.IncrementStrategyFinder.GetIncrementForCommits(GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable<GitVersion.ICommit!>! commits) -> GitVersion.VersionField?
899899
GitVersion.VersionCalculation.INextVersionCalculator
900900
GitVersion.VersionCalculation.INextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion!

src/GitVersion.Core/VersionCalculation/Abstractions/IMainlineVersionCalculator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ namespace GitVersion.VersionCalculation;
22

33
public interface IMainlineVersionCalculator
44
{
5-
SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion);
5+
SemanticVersion FindMainlineModeVersion(NextVersion nextVersion);
6+
67
SemanticVersionBuildMetaData CreateVersionBuildMetaData(ICommit? baseVersionSource);
78
}

src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ public MainlineVersionCalculator(ILog log, IRepositoryStore repositoryStore, Laz
2121
this.incrementStrategyFinder = incrementStrategyFinder.NotNull();
2222
}
2323

24-
public SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion)
24+
public SemanticVersion FindMainlineModeVersion(NextVersion nextVersion)
2525
{
26+
var baseVersion = nextVersion.BaseVersion;
27+
2628
if (baseVersion.SemanticVersion.PreReleaseTag.HasTag())
2729
{
2830
throw new NotSupportedException("Mainline development mode doesn't yet support pre-release tags on main");
@@ -52,8 +54,7 @@ public SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion)
5254
var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(baseVersion.BaseVersionSource, mainlineTip).ToList();
5355
var directCommits = new List<ICommit>(mainlineCommitLog.Count);
5456

55-
var nextVersion = Context.Configuration.NextVersion;
56-
if (nextVersion.IsNullOrEmpty())
57+
if (Context.Configuration.NextVersion.IsNullOrEmpty())
5758
{
5859
// Scans commit log in reverse, aggregating merge commits
5960
foreach (var commit in mainlineCommitLog)
@@ -69,17 +70,22 @@ public SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion)
6970
mainlineVersion = IncrementForEachCommit(directCommits, mainlineVersion, mainline);
7071
}
7172

72-
mainlineVersion.BuildMetaData = CreateVersionBuildMetaData(mergeBase);
73+
var baseVersionBuildMetaData = CreateVersionBuildMetaData(mergeBase);
7374

7475
// branches other than main always get a bump for the act of branching
75-
if (!Context.CurrentBranch.Equals(mainline) && nextVersion.IsNullOrEmpty())
76+
if (!Context.CurrentBranch.Equals(mainline) && Context.Configuration.NextVersion.IsNullOrEmpty())
7677
{
7778
var branchIncrement = FindMessageIncrement(null, Context.CurrentCommit, mergeBase, mainlineCommitLog);
7879
this.log.Info($"Performing {branchIncrement} increment for current branch ");
7980

8081
mainlineVersion = mainlineVersion.IncrementVersion(branchIncrement, null);
8182
}
82-
return mainlineVersion;
83+
84+
return new SemanticVersion(mainlineVersion)
85+
{
86+
PreReleaseTag = new SemanticVersionPreReleaseTag(nextVersion.IncrementedVersion.PreReleaseTag),
87+
BuildMetaData = baseVersionBuildMetaData
88+
};
8389
}
8490
}
8591

@@ -134,7 +140,7 @@ private SemanticVersion AggregateMergeCommitIncrement(ICommit commit, List<IComm
134140

135141
private IBranch GetMainline(ICommit? baseVersionSource)
136142
{
137-
if (Context.Configuration.Branches.TryGetValue(Context.CurrentBranch.Name.Friendly, out var branchConfiguration)
143+
if (Context.Configuration.Branches.TryGetValue(Context.CurrentBranch.Name.WithoutOrigin, out var branchConfiguration)
138144
&& branchConfiguration.IsMainline == true)
139145
{
140146
return Context.CurrentBranch;

src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs

Lines changed: 51 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -44,66 +44,74 @@ public virtual NextVersion FindVersion()
4444
}
4545

4646
var nextVersion = Calculate(Context.CurrentBranch, Context.Configuration);
47-
var baseVersion = nextVersion.BaseVersion;
4847

49-
SemanticVersion semver;
48+
SemanticVersion semanticVersion;
5049
if (nextVersion.Configuration.VersioningMode == VersioningMode.Mainline)
5150
{
52-
semver = this.mainlineVersionCalculator.FindMainlineModeVersion(baseVersion);
51+
semanticVersion = this.mainlineVersionCalculator.FindMainlineModeVersion(nextVersion);
5352
}
5453
else
5554
{
56-
////
57-
// TODO: Please do a refactoring and move the logic from IMainlineVersionCalculator::CreateVersionBuildMetaData to some where else (Reason: Separation of concern violation).
58-
var baseVersionBuildMetaData = this.mainlineVersionCalculator.CreateVersionBuildMetaData(baseVersion.BaseVersionSource);
59-
//
55+
semanticVersion = FindOtherModeVersion(nextVersion);
56+
}
57+
58+
if (semanticVersion.CompareTo(Context.CurrentCommitTaggedVersion) == 0)
59+
{
60+
// Will always be 0, don't bother with the +0 on tags
61+
semanticVersion.BuildMetaData.CommitsSinceTag = null;
62+
}
63+
64+
return new(semanticVersion, nextVersion.BaseVersion, new(nextVersion.Branch, nextVersion.Configuration));
65+
}
66+
67+
private SemanticVersion FindOtherModeVersion(NextVersion nextVersion)
68+
{
69+
////
70+
// TODO: Please do a refactoring and move the logic from IMainlineVersionCalculator::CreateVersionBuildMetaData to some where else (Reason: Separation of concern violation).
71+
var baseVersionBuildMetaData = this.mainlineVersionCalculator.CreateVersionBuildMetaData(
72+
nextVersion.BaseVersion.BaseVersionSource
73+
);
74+
//
75+
76+
////
77+
// TODO: We need to decide whether or not to calculate the upcoming semantic version or the previous one because of tagging. Actually this should be part of the branch configuration system.
78+
var takeIncrementedVersion = baseVersionBuildMetaData.Sha != nextVersion.BaseVersion.BaseVersionSource?.Sha;
79+
takeIncrementedVersion |= nextVersion.Configuration.IsReleaseBranch;
80+
takeIncrementedVersion |= nextVersion.Branch.Name.WithoutOrigin.StartsWith("develop");
81+
//
6082

83+
if (takeIncrementedVersion)
84+
{
6185
////
62-
// TODO: We need to decide whether or not to calculate the upcoming semantic version or the previous one because of tagging. Actually this should be part of the branch configuration system.
63-
var takeIncrementedVersion = baseVersionBuildMetaData.Sha != nextVersion.BaseVersion.BaseVersionSource?.Sha;
64-
takeIncrementedVersion |= nextVersion.Configuration.IsReleaseBranch;
65-
takeIncrementedVersion |= nextVersion.Branch.Name.WithoutOrigin.StartsWith("develop");
86+
// TODO: We need to consider somehow the IGitVersionConfiguration::Ignore property here!!
87+
var semanticVersionWithTag = this.repositoryStore.GetTaggedSemanticVersionsOnBranch(
88+
nextVersion.Branch, Context.Configuration.LabelPrefix, Context.Configuration.SemanticVersionFormat
89+
).FirstOrDefault();
6690
//
6791

68-
if (takeIncrementedVersion)
92+
if (semanticVersionWithTag?.Value.CompareTo(nextVersion.IncrementedVersion, false) > 0)
6993
{
70-
////
71-
// TODO: We need to consider somehow the IGitVersionConfiguration::Ignore property here!!
72-
var semanticVersionWithTag = this.repositoryStore.GetTaggedSemanticVersionsOnBranch(
73-
nextVersion.Branch, Context.Configuration.LabelPrefix, Context.Configuration.SemanticVersionFormat
74-
).FirstOrDefault();
75-
//
76-
77-
if (semanticVersionWithTag?.Value.CompareTo(nextVersion.IncrementedVersion, false) > 0)
94+
return new SemanticVersion(semanticVersionWithTag.Value)
7895
{
79-
semver = new SemanticVersion(semanticVersionWithTag.Value)
80-
{
81-
PreReleaseTag = new SemanticVersionPreReleaseTag(nextVersion.IncrementedVersion.PreReleaseTag),
82-
BuildMetaData = baseVersionBuildMetaData
83-
};
84-
}
85-
else
86-
semver = new SemanticVersion(nextVersion.IncrementedVersion)
87-
{
88-
BuildMetaData = baseVersionBuildMetaData
89-
};
96+
PreReleaseTag = new SemanticVersionPreReleaseTag(nextVersion.IncrementedVersion.PreReleaseTag),
97+
BuildMetaData = baseVersionBuildMetaData
98+
};
9099
}
91100
else
92101
{
93-
semver = new SemanticVersion(baseVersion.SemanticVersion)
102+
return new SemanticVersion(nextVersion.IncrementedVersion)
94103
{
95104
BuildMetaData = baseVersionBuildMetaData
96105
};
97106
}
98107
}
99-
100-
if (semver.CompareTo(Context.CurrentCommitTaggedVersion) == 0)
108+
else
101109
{
102-
// Will always be 0, don't bother with the +0 on tags
103-
semver.BuildMetaData.CommitsSinceTag = null;
110+
return new SemanticVersion(nextVersion.BaseVersion.SemanticVersion)
111+
{
112+
BuildMetaData = baseVersionBuildMetaData
113+
};
104114
}
105-
106-
return new(semver, baseVersion, new(nextVersion.Branch, nextVersion.Configuration));
107115
}
108116

109117
private NextVersion Calculate(IBranch branch, IGitVersionConfiguration configuration)
@@ -211,11 +219,11 @@ IEnumerable<NextVersion> GetNextVersionsInternal()
211219
log.Info("Using current branch name to calculate version tag");
212220

213221
var incrementedVersion = GetIncrementedVersion(effectiveConfiguration, baseVersion, label);
214-
if (effectiveConfiguration.Value.VersioningMode == VersioningMode.Mainline
215-
&& incrementedVersion.PreReleaseTag.HasTag())
216-
{
217-
continue;
218-
}
222+
//if (effectiveConfiguration.Value.VersioningMode == VersioningMode.Mainline
223+
// && incrementedVersion.PreReleaseTag.HasTag())
224+
//{
225+
// continue;
226+
//}
219227

220228
if (incrementedVersion.IsMatchForBranchSpecificLabel(label))
221229
{

0 commit comments

Comments
 (0)