Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,128 @@ public void HotfixBranchesWithTaggedCommitsOnHotfix()
fixture.AssertFullSemver("1.2.3", configBumpMinor);
}

[Test]
public void HotfixBranchesWithTaggedCommitsOnMain()
{
using var fixture = new EmptyRepositoryFixture();
var configBumpMinor = new Config()
{
VersioningMode = VersioningMode.Mainline,
Increment = IncrementStrategy.Minor,
Branches =
{
{
Config.MainBranchKey,
new BranchConfig
{
Regex = Config.MainBranchRegex,
SourceBranches = new HashSet<string>
{
Config.DevelopBranchKey,
Config.ReleaseBranchKey
},
Tag = string.Empty,
PreventIncrementOfMergedBranchVersion = true,
Increment = IncrementStrategy.Minor,
IsMainline = true,
PreReleaseWeight = 55000,
}
},
{
Config.HotfixBranchKey,
new BranchConfig
{
Tag = ""
}
}
}
};

fixture.Repository.MakeACommit("1");
fixture.MakeATaggedCommit("1.0.0");

fixture.MakeACommit(); // 1.1.0
fixture.AssertFullSemver("1.1.0", configBumpMinor);
fixture.ApplyTag("1.1.0");
fixture.AssertFullSemver("1.1.0", configBumpMinor);

fixture.BranchTo("hotfix/may");
fixture.AssertFullSemver("1.1.1", configBumpMinor);

// Move main on
fixture.Checkout(MainBranch);
fixture.MakeACommit();
fixture.AssertFullSemver("1.2.0", configBumpMinor);

// Continue on hotfix
fixture.Checkout("hotfix/may");
fixture.MakeACommit(); // 1.2.1
fixture.AssertFullSemver("1.1.1", configBumpMinor);
}

[Test]
public void HotfixBranchesWithTaggedCommitsOnHotfix()
{
using var fixture = new EmptyRepositoryFixture();
var configBumpMinor = new Config()
{
VersioningMode = VersioningMode.Mainline,
Increment = IncrementStrategy.Minor,
Branches =
{
{
Config.MainBranchKey,
new BranchConfig
{
Regex = Config.MainBranchRegex,
SourceBranches = new HashSet<string>
{
Config.DevelopBranchKey,
Config.ReleaseBranchKey
},
Tag = string.Empty,
PreventIncrementOfMergedBranchVersion = true,
Increment = IncrementStrategy.Minor,
IsMainline = true,
PreReleaseWeight = 55000,
}
},
{
Config.HotfixBranchKey,
new BranchConfig
{
Tag = ""
}
}
}
};

fixture.Repository.MakeACommit("1");
fixture.MakeATaggedCommit("1.0.0");

fixture.MakeACommit(); // 1.1.0
fixture.AssertFullSemver("1.1.0", configBumpMinor);
fixture.ApplyTag("1.1.0");
fixture.AssertFullSemver("1.1.0", configBumpMinor);
fixture.MakeACommit(); // 1.2.0
fixture.AssertFullSemver("1.2.0", configBumpMinor);

fixture.BranchTo("hotfix/may");
fixture.AssertFullSemver("1.2.1", configBumpMinor);

// Move main on
fixture.Checkout(MainBranch);
fixture.MakeACommit();
fixture.AssertFullSemver("1.3.0", configBumpMinor);

// Continue on hotfix
fixture.Checkout("hotfix/may");
fixture.MakeACommit(); // 1.2.1
fixture.MakeATaggedCommit("1.2.2");
fixture.MakeACommit(); // 1.2.3
fixture.AssertFullSemver("1.2.3", configBumpMinor);
}

[Test]
public void VerifyForwardMerge()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,9 +202,9 @@ private IBranch GetMainline(ICommit? baseVersionSource)
/// <returns>The best possible merge base between the current commit and <paramref name="mainline"/> that is not the child of a forward merge.</returns>
private ICommit FindMergeBaseBeforeForwardMerge(ICommit? baseVersionSource, IBranch mainline, [NotNullWhen(true)] out ICommit? mainlineTip)
{
var mergeBase = this.repositoryStore.FindMergeBase(context.CurrentCommit!, mainline.Tip!);
var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(baseVersionSource, mainline.Tip).ToList();
var mergeBase = repositoryStore.FindMergeBase(context.CurrentCommit, mainline.Tip);
//var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(mergeBase.Parents.FirstOrDefault(), mainline.Tip).ToList();
var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(baseVersionSource, mainline.Tip).ToList();

// find the mainline commit effective for versioning the current branch
mainlineTip = GetEffectiveMainlineTip(mainlineCommitLog, mergeBase, mainline.Tip);
Expand Down