Skip to content

Commit 18a6c3b

Browse files
committed
Integrate code review remarks of asbjornu.
1 parent 72fa337 commit 18a6c3b

18 files changed

+188
-27
lines changed

docs/input/docs/reference/configuration.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,7 @@ The details of the available options are as follows:
341341

342342
### workflow
343343

344-
The base template of the configuration to use. Possible values are: GitFlow/v1 or GitHubFlow/v1. Defaults to GitFlow/v1 if not set. To create a configuration from scratch without using a base template please specify an empty string.
345-
344+
The base template of the configuration to use. Possible values are `GitFlow/v1` or `GitHubFlow/v1`. Defaults to `GitFlow/v1` if not set. To create a configuration from scratch without using a base template, please specify an empty string.
346345
### next-version
347346

348347
Allows you to bump the next version explicitly. Useful for bumping `main` or a

src/GitVersion.Configuration/Workflows/TrunkBased/v1.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ branches:
2121
increment: Patch
2222
prevent-increment:
2323
of-merged-branch: true
24-
when-current-commit-tagged: trueS
24+
when-current-commit-tagged: true
2525
track-merge-target: false
2626
regex: ^master$|^main$
2727
source-branches: []

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

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1307,4 +1307,150 @@ public void EnsureVersionAfterMainIsMergedBackToDevelopIsCorrectForGitFlow(bool
13071307
// ✅ succeeds as expected
13081308
fixture.AssertFullSemver(semanticVersion, configuration);
13091309
}
1310+
1311+
/// <summary>
1312+
/// see https://github.com/GitTools/GitVersion/issues/2394
1313+
/// </summary>
1314+
[Test]
1315+
public void EnsureVersionSourceIsSetToTheRightTag()
1316+
{
1317+
// Arrange
1318+
var configuration = GitFlowConfigurationBuilder.New.Build();
1319+
1320+
// Act
1321+
using var fixture = new BaseGitFlowRepositoryFixture("0.1.0");
1322+
1323+
fixture.Checkout("main");
1324+
fixture.MergeNoFF("develop");
1325+
fixture.Checkout("develop");
1326+
fixture.MakeACommit("Feature commit 1");
1327+
fixture.BranchTo("release/0.2.0");
1328+
fixture.MakeACommit("Release commit 1");
1329+
fixture.Checkout("main");
1330+
fixture.MergeNoFF("release/0.2.0");
1331+
fixture.ApplyTag("0.2.0");
1332+
var tag = fixture.Repository.Head.Tip;
1333+
fixture.Checkout("develop");
1334+
fixture.MergeNoFF("main");
1335+
var version = fixture.GetVersion(configuration);
1336+
1337+
// Assert
1338+
version.VersionSourceSha.ShouldBe(tag.Sha);
1339+
}
1340+
1341+
/// <summary>
1342+
/// see https://github.com/GitTools/GitVersion/issues/3689
1343+
/// </summary>
1344+
[Test]
1345+
public void UnversionedHotfix()
1346+
{
1347+
var configuration = GitFlowConfigurationBuilder.New.Build();
1348+
1349+
using var fixture = new BaseGitFlowRepositoryFixture("1.2.0");
1350+
1351+
// create hotfix
1352+
Commands.Checkout(fixture.Repository, "main");
1353+
Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("hotfix/put-out-the-fire"));
1354+
fixture.Repository.MakeACommit();
1355+
1356+
fixture.AssertFullSemver("1.2.1-beta.1+1", configuration);
1357+
fixture.Repository.MakeACommit();
1358+
fixture.AssertFullSemver("1.2.1-beta.1+2", configuration);
1359+
1360+
// Merge hotfix branch to main
1361+
Commands.Checkout(fixture.Repository, "main");
1362+
1363+
fixture.Repository.MergeNoFF("hotfix/put-out-the-fire", Generate.SignatureNow());
1364+
1365+
fixture.AssertFullSemver("1.2.1-3", configuration);
1366+
}
1367+
1368+
[Test]
1369+
public void LocalOnly()
1370+
{
1371+
var configuration = GitFlowConfigurationBuilder.New
1372+
.WithBranch("main", _ => _.WithLabel("beta").WithIncrement(IncrementStrategy.Minor))
1373+
.WithBranch("pull-request", _ => _.WithLabel("alpha-pr"))
1374+
.WithBranch("support", _ => _.WithLabel("beta"))
1375+
.Build();
1376+
1377+
var fixture = PrepareLocalRepo();
1378+
1379+
fixture.AssertFullSemver("1.0.2-alpha-pr2.2", configuration);
1380+
1381+
fixture.Repository.DumpGraph();
1382+
}
1383+
1384+
[Test]
1385+
public void WithRemote()
1386+
{
1387+
var configuration = GitFlowConfigurationBuilder.New
1388+
.WithBranch("main", _ => _.WithLabel("beta").WithIncrement(IncrementStrategy.Minor))
1389+
.WithBranch("pull-request", _ => _.WithLabel("alpha-pr"))
1390+
.WithBranch("support", _ => _.WithLabel("beta"))
1391+
.Build();
1392+
1393+
var fixture = PrepareLocalRepo();
1394+
1395+
var local = fixture.CloneRepository();
1396+
local.Checkout("origin/hotfix/v1.0.2");
1397+
local.BranchTo("hotfix/v1.0.2", "hotfix");
1398+
local.Checkout("origin/support/v1.0.x");
1399+
local.BranchTo("support/v1.0.x", "support");
1400+
local.Checkout("origin/main");
1401+
local.BranchTo("main", "main");
1402+
local.Checkout("pull/2/merge");
1403+
1404+
local.AssertFullSemver("1.0.2-alpha-pr2.2", configuration);
1405+
1406+
local.Repository.DumpGraph();
1407+
}
1408+
1409+
private static RepositoryFixtureBase PrepareLocalRepo()
1410+
{
1411+
var fixture = new EmptyRepositoryFixture();
1412+
1413+
fixture.Repository.MakeACommit("First commit");
1414+
fixture.Repository.ApplyTag("v1.0.0", new Signature("Michael Denny", "[email protected]", DateTimeOffset.Now), "Release v1.0.0");
1415+
1416+
fixture.Repository.MakeACommit("Merged PR 1: new feature");
1417+
1418+
fixture.Checkout("tags/v1.0.0");
1419+
fixture.BranchTo("support/v1.0.x", "support");
1420+
fixture.Repository.MakeACommit("hotfix 1");
1421+
fixture.Repository.ApplyTag("v1.0.1", new Signature("Michael Denny", "[email protected]", DateTimeOffset.Now), "hotfix 1");
1422+
1423+
fixture.BranchTo("hotfix/v1.0.2", "hotfix");
1424+
fixture.Repository.MakeACommit("hotfix 2");
1425+
1426+
fixture.Checkout("support/v1.0.x");
1427+
fixture.BranchTo("pull/2/merge", "pr-merge");
1428+
fixture.MergeNoFF("hotfix/v1.0.2");
1429+
1430+
return fixture;
1431+
}
1432+
1433+
[Test]
1434+
public void MyTest()
1435+
{
1436+
var configuration = GitFlowConfigurationBuilder.New
1437+
.WithBranch("develop", _ => _.WithSourceBranches("release"))
1438+
.Build();
1439+
1440+
using var fixture = new EmptyRepositoryFixture();
1441+
1442+
fixture.Repository.MakeACommit();
1443+
fixture.Checkout(MainBranch);
1444+
fixture.Repository.ApplyTag("1.2.1");
1445+
1446+
fixture.BranchTo("develop");
1447+
fixture.Repository.MakeACommit("+semver: feature");
1448+
fixture.BranchTo("release/some_release");
1449+
fixture.Repository.MakeCommits(1);
1450+
fixture.Repository.ApplyTag("1.3.0-beta.1");
1451+
fixture.Checkout("develop");
1452+
fixture.Repository.MakeACommit("+semver: feature");
1453+
1454+
fixture.AssertFullSemver("1.4.0-alpha.1", configuration);
1455+
}
13101456
}

src/GitVersion.Core/VersionCalculation/TrunkBased/NonTrunk/CommitOnNonTrunk.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ internal sealed class CommitOnNonTrunk : ITrunkBasedIncrementer
1111
// A 58 minutes ago
1212

1313
public bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
14-
=> !commit.HasChildIteration && !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
15-
&& context.SemanticVersion is null;
14+
=> !commit.HasChildIteration
15+
&& !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
16+
&& context.SemanticVersion is null;
1617

1718
public IEnumerable<IBaseVersionIncrement> GetIncrements(
1819
TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)

src/GitVersion.Core/VersionCalculation/TrunkBased/NonTrunk/CommitOnNonTrunkBranchedBase.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ namespace GitVersion.VersionCalculation.TrunkBased.NonTrunk;
66
internal abstract class CommitOnNonTrunkBranchedBase : ITrunkBasedIncrementer
77
{
88
public virtual bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
9-
=> !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch && commit.BranchName != iteration.BranchName && commit.Successor is null;
9+
=> !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
10+
&& commit.BranchName != iteration.BranchName
11+
&& commit.Successor is null;
1012

1113
public virtual IEnumerable<IBaseVersionIncrement> GetIncrements(
1214
TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)

src/GitVersion.Core/VersionCalculation/TrunkBased/NonTrunk/CommitOnNonTrunkBranchedToNonTrunk.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ internal sealed class CommitOnNonTrunkBranchedToNonTrunk : CommitOnNonTrunkBranc
1414
// A 58 minutes ago <<--
1515

1616
public override bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
17-
=> base.MatchPrecondition(iteration, commit, context) && !(iteration.Configuration.IsMainBranch == true);
17+
=> base.MatchPrecondition(iteration, commit, context)
18+
&& !iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch;
1819
}

src/GitVersion.Core/VersionCalculation/TrunkBased/NonTrunk/CommitOnNonTrunkBranchedToTrunk.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ internal sealed class CommitOnNonTrunkBranchedToTrunk : CommitOnNonTrunkBranched
1414
// A 58 minutes ago <<--
1515

1616
public override bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
17-
=> base.MatchPrecondition(iteration, commit, context) && iteration.Configuration.IsMainBranch == true;
17+
=> base.MatchPrecondition(iteration, commit, context)
18+
&& iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch;
1819
}

src/GitVersion.Core/VersionCalculation/TrunkBased/NonTrunk/CommitOnNonTrunkWithPreReleaseTagBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ namespace GitVersion.VersionCalculation.TrunkBased.NonTrunk;
66
internal abstract class CommitOnNonTrunkWithPreReleaseTagBase : ITrunkBasedIncrementer
77
{
88
public virtual bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
9-
=> !commit.HasChildIteration && !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
9+
=> !commit.HasChildIteration
10+
&& !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
1011
&& context.SemanticVersion?.IsPreRelease == true;
1112

1213
public virtual IEnumerable<IBaseVersionIncrement> GetIncrements(

src/GitVersion.Core/VersionCalculation/TrunkBased/NonTrunk/CommitOnNonTrunkWithStableTagBase.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ namespace GitVersion.VersionCalculation.TrunkBased.NonTrunk;
66
internal abstract class CommitOnNonTrunkWithStableTagBase : ITrunkBasedIncrementer
77
{
88
public virtual bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
9-
=> !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch && !commit.HasChildIteration
10-
&& context.SemanticVersion?.IsPreRelease == false;
9+
=> !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
10+
&& !commit.HasChildIteration
11+
&& context.SemanticVersion?.IsPreRelease == false;
1112

1213
public virtual IEnumerable<IBaseVersionIncrement> GetIncrements(
1314
TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)

src/GitVersion.Core/VersionCalculation/TrunkBased/NonTrunk/FirstCommitOnRelease.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ internal sealed class FirstCommitOnRelease : ITrunkBasedIncrementer
1414
// A 58 minutes ago (main)
1515

1616
public bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
17-
=> !commit.HasChildIteration && !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
18-
&& commit.GetEffectiveConfiguration(context.Configuration).IsReleaseBranch
19-
&& context.SemanticVersion is null && (commit.Predecessor is null
20-
|| commit.Predecessor?.BranchName != commit.BranchName);
17+
=> !commit.HasChildIteration
18+
&& !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
19+
&& commit.GetEffectiveConfiguration(context.Configuration).IsReleaseBranch
20+
&& context.SemanticVersion is null
21+
&& (commit.Predecessor is null
22+
|| commit.Predecessor?.BranchName != commit.BranchName);
2123

2224
public IEnumerable<IBaseVersionIncrement> GetIncrements(
2325
TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)

src/GitVersion.Core/VersionCalculation/TrunkBased/NonTrunk/MergeCommitOnNonTrunkBase.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ namespace GitVersion.VersionCalculation.TrunkBased.NonTrunk;
55
internal abstract class MergeCommitOnNonTrunkBase : ITrunkBasedIncrementer
66
{
77
public virtual bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
8-
=> commit.HasChildIteration && !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
9-
&& context.SemanticVersion is null;
8+
=> commit.HasChildIteration
9+
&& !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch
10+
&& context.SemanticVersion is null;
1011

1112
public virtual IEnumerable<IBaseVersionIncrement> GetIncrements(
1213
TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)

src/GitVersion.Core/VersionCalculation/TrunkBased/Trunk/CommitOnTrunkBranchedBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public virtual IEnumerable<IBaseVersionIncrement> GetIncrements(
1515
context.BaseVersionSource = commit.Value;
1616

1717
var effectiveConfiguration = iteration.GetEffectiveConfiguration(context.Configuration);
18-
if (iteration.Configuration.IsReleaseBranch == true
18+
if (iteration.GetEffectiveConfiguration(context.Configuration).IsReleaseBranch
1919
&& iteration.BranchName.TryGetSemanticVersion(out var element, effectiveConfiguration))
2020
{
2121
context.AlternativeSemanticVersions.Add(element.Value);

src/GitVersion.Core/VersionCalculation/TrunkBased/Trunk/CommitOnTrunkBranchedToNonTrunk.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ internal sealed class CommitOnTrunkBranchedToNonTrunk : CommitOnTrunkBranchedBas
1414
// A 58 minutes ago <<--
1515

1616
public override bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
17-
=> base.MatchPrecondition(iteration, commit, context) && !(iteration.Configuration.IsMainBranch == true);
17+
=> base.MatchPrecondition(iteration, commit, context)
18+
&& !iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch;
1819
}

src/GitVersion.Core/VersionCalculation/TrunkBased/Trunk/CommitOnTrunkBranchedToTrunk.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ internal sealed class CommitOnTrunkBranchedToTrunk : CommitOnTrunkBranchedBase
1414
// A 58 minutes ago <<--
1515

1616
public override bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)
17-
=> base.MatchPrecondition(iteration, commit, context) && iteration.Configuration.IsMainBranch == true;
17+
=> base.MatchPrecondition(iteration, commit, context)
18+
&& iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch;
1819
}

src/GitVersion.Core/VersionCalculation/TrunkBased/Trunk/LastCommitOnTrunkWithPreReleaseTag.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public override IEnumerable<IBaseVersionIncrement> GetIncrements(
1818
yield return item;
1919
}
2020

21-
if (iteration.Configuration.IsMainBranch == true)
21+
if (iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch)
2222
{
2323
context.Increment = commit.GetIncrementForcedByBranch(context.Configuration);
2424

src/GitVersion.Core/VersionCalculation/TrunkBased/Trunk/LastCommitOnTrunkWithStableTag.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public override IEnumerable<IBaseVersionIncrement> GetIncrements(
1616
yield return item;
1717
}
1818

19-
if (iteration.Configuration.IsMainBranch == true)
19+
if (iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch)
2020
{
2121
context.ForceIncrement = true;
2222

src/GitVersion.Core/VersionCalculation/TrunkBased/TrunkBasedIteration.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ internal record TrunkBasedIteration
1818

1919
public EffectiveConfiguration GetEffectiveConfiguration(IGitVersionConfiguration configuration)
2020
{
21-
if (effectiveConfiguration is not null) return effectiveConfiguration;
21+
if (this.effectiveConfiguration is not null)
22+
{
23+
return this.effectiveConfiguration;
24+
}
2225

2326
IBranchConfiguration branchConfiguration = Configuration;
2427

@@ -28,7 +31,7 @@ public EffectiveConfiguration GetEffectiveConfiguration(IGitVersionConfiguration
2831
branchConfiguration = branchConfiguration.Inherit(parentConfiguration);
2932
}
3033

31-
return effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration);
34+
return this.effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration);
3235
}
3336

3437
public TrunkBasedIteration? ParentIteration { get; }

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,11 @@ private IEnumerable<BaseVersion> GetBaseVersionsInternal(EffectiveBranchConfigur
4141

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

46-
foreach (var semanticVersionWithTag
47-
in taggedSemanticVersions.Where(element => element.Value.IsMatchForBranchSpecificLabel(label)))
47+
var semanticVersionsWithTag = taggedSemanticVersions.Where(element => element.Value.IsMatchForBranchSpecificLabel(label));
48+
foreach (var semanticVersionWithTag in semanticVersionsWithTag)
4849
{
4950
var baseVersionSource = semanticVersionWithTag.Tag.Commit;
5051
var increment = incrementStrategyFinder.DetermineIncrementedField(

0 commit comments

Comments
 (0)