Skip to content

Commit 6e05773

Browse files
authored
Merge pull request #3927 from HHobeck/feature/GitVersion-calculates-the-wrong-version
GitVersion calculates the wrong version after main is merged back to develop
2 parents c690a31 + a0c170b commit 6e05773

File tree

8 files changed

+78
-18
lines changed

8 files changed

+78
-18
lines changed

src/GitVersion.Configuration/BranchConfiguration.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,4 @@ public virtual IBranchConfiguration Inherit(IBranchConfiguration configuration)
107107
PreReleaseWeight = PreReleaseWeight ?? configuration.PreReleaseWeight
108108
};
109109
}
110-
111-
public IBranchConfiguration Empty() => new BranchConfiguration
112-
{
113-
RegularExpression = string.Empty,
114-
Label = ConfigurationConstants.BranchNamePlaceholder,
115-
Increment = IncrementStrategy.Inherit
116-
};
117110
}

src/GitVersion.Configuration/GitVersionConfiguration.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,11 @@ public string ToJsonString()
157157
stream.Flush();
158158
return stringBuilder.ToString();
159159
}
160+
161+
public IBranchConfiguration GetEmptyBranchConfiguration() => new BranchConfiguration
162+
{
163+
RegularExpression = string.Empty,
164+
Label = ConfigurationConstants.BranchNamePlaceholder,
165+
Increment = IncrementStrategy.Inherit
166+
};
160167
}

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

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,4 +1218,57 @@ public void EnsurePreventIncrementWhenCurrentCommitTaggedOnReleaseBranchAndIncre
12181218

12191219
fixture.AssertFullSemver(semVersion, configuration);
12201220
}
1221+
1222+
[TestCase(false, "2.0.0-alpha.3")]
1223+
[TestCase(true, "2.0.0-alpha.2")]
1224+
public void EnsureVersionAfterMainIsMergedBackToDevelopIsCorrectForTrunkBased(bool applyTag, string semanticVersion)
1225+
{
1226+
var configuration = GitFlowConfigurationBuilder.New
1227+
.WithVersionStrategy(VersionStrategies.TrunkBased)
1228+
.Build();
1229+
1230+
using var fixture = new EmptyRepositoryFixture("main");
1231+
1232+
fixture.MakeACommit("A");
1233+
fixture.ApplyTag("1.0.0");
1234+
fixture.BranchTo("develop");
1235+
fixture.MakeACommit("B +semver: major");
1236+
1237+
// ✅ succeeds as expected
1238+
fixture.AssertFullSemver("2.0.0-alpha.1", configuration);
1239+
1240+
fixture.Checkout("main");
1241+
fixture.MakeACommit("C");
1242+
if (applyTag) fixture.ApplyTag("1.0.1");
1243+
fixture.Checkout("develop");
1244+
fixture.MergeNoFF("main");
1245+
1246+
// ✅ succeeds as expected
1247+
fixture.AssertFullSemver(semanticVersion, configuration);
1248+
}
1249+
1250+
[Test]
1251+
public void EnsureVersionAfterMainIsMergedBackToDevelopIsCorrectForGitFlow()
1252+
{
1253+
var configuration = GitFlowConfigurationBuilder.New.Build();
1254+
1255+
using var fixture = new EmptyRepositoryFixture("main");
1256+
1257+
fixture.MakeACommit("A");
1258+
fixture.ApplyTag("1.0.0");
1259+
fixture.BranchTo("develop");
1260+
fixture.MakeACommit("B +semver: major");
1261+
1262+
// ✅ succeeds as expected
1263+
fixture.AssertFullSemver("2.0.0-alpha.1", configuration);
1264+
1265+
fixture.Checkout("main");
1266+
fixture.MakeACommit("C");
1267+
fixture.ApplyTag("1.0.1");
1268+
fixture.Checkout("develop");
1269+
fixture.MergeNoFF("main");
1270+
1271+
// ✅ succeeds as expected
1272+
fixture.AssertFullSemver("2.0.0-alpha.3", configuration);
1273+
}
12211274
}

src/GitVersion.Core/Configuration/IBranchConfiguration.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,5 @@ public bool IsMatch(string branchName)
3838

3939
IReadOnlyCollection<string> IsSourceBranchFor { get; }
4040

41-
IBranchConfiguration Empty();
42-
4341
IBranchConfiguration Inherit(IBranchConfiguration configuration);
4442
}

src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,6 @@ public interface IGitVersionConfiguration : IBranchConfiguration
5151
IIgnoreConfiguration Ignore { get; }
5252

5353
string ToJsonString();
54+
55+
IBranchConfiguration GetEmptyBranchConfiguration();
5456
}

src/GitVersion.Core/Extensions/ConfigurationExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public static IBranchConfiguration GetBranchConfiguration(this IGitVersionConfig
2424
public static IBranchConfiguration GetBranchConfiguration(this IGitVersionConfiguration configuration, ReferenceName branchName)
2525
{
2626
var branchConfiguration = GetBranchConfigurations(configuration, branchName.WithoutOrigin).FirstOrDefault();
27-
branchConfiguration ??= configuration.Empty();
27+
branchConfiguration ??= configuration.GetEmptyBranchConfiguration();
2828
return branchConfiguration;
2929
}
3030

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@ GitVersion.Configuration.EffectiveConfiguration.VersionStrategy.get -> GitVersio
147147
GitVersion.Configuration.IBranchConfiguration
148148
GitVersion.Configuration.IBranchConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode?
149149
GitVersion.Configuration.IBranchConfiguration.DeploymentMode.get -> GitVersion.VersionCalculation.DeploymentMode?
150-
GitVersion.Configuration.IBranchConfiguration.Empty() -> GitVersion.Configuration.IBranchConfiguration!
151150
GitVersion.Configuration.IBranchConfiguration.Increment.get -> GitVersion.IncrementStrategy
152151
GitVersion.Configuration.IBranchConfiguration.Inherit(GitVersion.Configuration.IBranchConfiguration! configuration) -> GitVersion.Configuration.IBranchConfiguration!
153152
GitVersion.Configuration.IBranchConfiguration.IsMainBranch.get -> bool?
@@ -178,6 +177,7 @@ GitVersion.Configuration.IGitVersionConfiguration.AssemblyVersioningFormat.get -
178177
GitVersion.Configuration.IGitVersionConfiguration.AssemblyVersioningScheme.get -> GitVersion.Extensions.AssemblyVersioningScheme?
179178
GitVersion.Configuration.IGitVersionConfiguration.Branches.get -> System.Collections.Generic.IReadOnlyDictionary<string!, GitVersion.Configuration.IBranchConfiguration!>!
180179
GitVersion.Configuration.IGitVersionConfiguration.CommitDateFormat.get -> string?
180+
GitVersion.Configuration.IGitVersionConfiguration.GetEmptyBranchConfiguration() -> GitVersion.Configuration.IBranchConfiguration!
181181
GitVersion.Configuration.IGitVersionConfiguration.Ignore.get -> GitVersion.Configuration.IIgnoreConfiguration!
182182
GitVersion.Configuration.IGitVersionConfiguration.TagPreReleaseWeight.get -> int?
183183
GitVersion.Configuration.IGitVersionConfiguration.TagPrefix.get -> string?

src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public VersionField DetermineIncrementedField(
4040
configuration.NotNull();
4141

4242
var commitMessageIncrement = FindCommitMessageIncrement(
43-
configuration, baseVersion.BaseVersionSource, currentCommit, label);
43+
configuration, baseVersion, currentCommit, label);
4444

4545
var defaultIncrement = configuration.Increment.ToVersionField();
4646

@@ -81,31 +81,38 @@ public VersionField DetermineIncrementedField(
8181
}
8282

8383
private VersionField? FindCommitMessageIncrement(
84-
EffectiveConfiguration configuration, ICommit? baseCommit, ICommit? currentCommit, string? label)
84+
EffectiveConfiguration configuration, BaseVersion baseVersion, ICommit? currentCommit, string? label)
8585
{
8686
if (configuration.CommitMessageIncrementing == CommitMessageIncrementMode.Disabled)
8787
{
8888
return null;
8989
}
9090

91+
var baseCommit = baseVersion.BaseVersionSource;
92+
9193
//get tags with valid version - depends on configuration (see #3757)
9294
var targetShas = new Lazy<IReadOnlySet<string>>(() =>
9395
this.taggedSemanticVersionRepository.GetTaggedSemanticVersions(configuration.TagPrefix, configuration.SemanticVersionFormat)
94-
.SelectMany(_ => _).Where(_ => _.Value.IsMatchForBranchSpecificLabel(label)).Select(_ => _.Tag.TargetSha).ToHashSet()
96+
.SelectMany(_ => _).Where(_ => _.Value.IsMatchForBranchSpecificLabel(label)).Select(_ => _.Tag.TargetSha).ToHashSet()
9597
);
9698

97-
var commits = GetIntermediateCommits(baseCommit, currentCommit);
99+
var targetTags = this.taggedSemanticVersionRepository
100+
.GetTaggedSemanticVersions(configuration.TagPrefix, configuration.SemanticVersionFormat)
101+
.SelectMany(_ => _).Where(element => element.Value.IsMatchForBranchSpecificLabel(label)
102+
&& element.Value.CompareTo(baseVersion.GetSemanticVersion()) == 0).Select(_ => _.Tag.TargetSha).ToHashSet();
103+
104+
var intermediateCommits = GetIntermediateCommits(baseCommit, currentCommit);
98105
// consider commit messages since latest tag only (see #3071)
99-
commits = commits
106+
var commits = intermediateCommits
100107
.Reverse()
101-
.TakeWhile(x => !targetShas.Value.Contains(x.Sha))
108+
.TakeWhile(x => baseCommit != x)
109+
.Where(element => !targetShas.Value.Contains(element.Sha))
102110
.Reverse();
103111

104112
if (configuration.CommitMessageIncrementing == CommitMessageIncrementMode.MergeMessageOnly)
105113
{
106114
commits = commits.Where(c => c.Parents.Count() > 1);
107115
}
108-
109116
return GetIncrementForCommits(
110117
majorVersionBumpMessage: configuration.MajorVersionBumpMessage,
111118
minorVersionBumpMessage: configuration.MinorVersionBumpMessage,

0 commit comments

Comments
 (0)