Skip to content

Commit c172ffe

Browse files
author
Ruh Ullah Shah
committed
Fix the CommitsSinceVersionSource count in case a Release branch was merged and deleted
1 parent e351ad4 commit c172ffe

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ public void TagOnHotfixShouldNotAffectDevelop()
223223
}
224224
}
225225

226+
[Test]
226227
public void CommitsSinceVersionSourceShouldNotGoDownUponGitFlowReleaseFinish()
227228
{
228229
var config = new Config

src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void NoMergeBacksToDevelopInCaseThereAreChangesInReleaseBranch()
5151
fixture.Repository.MakeACommit();
5252
fixture.Repository.Branches.Remove("release/1.0.0");
5353

54-
fixture.AssertFullSemver("1.1.0-alpha.2");
54+
fixture.AssertFullSemver("1.1.0-alpha.3");
5555
}
5656
}
5757

src/GitVersionCore/VersionCalculation/BaseVersionCalculator.cs

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
namespace GitVersion.VersionCalculation
1+
namespace GitVersion.VersionCalculation
22
{
33
using System;
4+
using System.Collections.Generic;
45
using System.Linq;
6+
using System.Text.RegularExpressions;
57
using GitVersion.VersionCalculation.BaseVersionCalculators;
68

79
public class BaseVersionCalculator : IBaseVersionCalculator
@@ -37,13 +39,15 @@ public BaseVersion GetBaseVersion(GitVersionContext context)
3739

3840
return true;
3941
})
40-
.Select(v => new
42+
.Select(v => new Versions
4143
{
4244
IncrementedVersion = MaybeIncrement(context, v),
4345
Version = v
4446
})
4547
.ToList();
4648

49+
FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted
50+
(context, baseVersions);
4751
var maxVersion = baseVersions.Aggregate((v1, v2) => v1.IncrementedVersion > v2.IncrementedVersion ? v1 : v2);
4852
var matchingVersionsOnceIncremented = baseVersions
4953
.Where(b => b.Version.BaseVersionSource != null && b.IncrementedVersion == maxVersion.IncrementedVersion)
@@ -92,5 +96,45 @@ public static SemanticVersion MaybeIncrement(GitVersionContext context, BaseVers
9296

9397
return version.SemanticVersion;
9498
}
99+
100+
private void FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(
101+
GitVersionContext context, List<Versions> baseVersions)
102+
{
103+
if (!ReleaseBranchExistsInRepo(context))
104+
{
105+
foreach (var baseVersion in baseVersions)
106+
{
107+
if (baseVersion.Version.Source.Contains("Merge message")
108+
&& baseVersion.Version.Source.Contains("Merge branch")
109+
&& baseVersion.Version.Source.Contains("release"))
110+
{
111+
var parents = baseVersion.Version.BaseVersionSource.Parents.ToList();
112+
baseVersion.Version = new BaseVersion(
113+
context,
114+
baseVersion.Version.Source,
115+
baseVersion.Version.ShouldIncrement,
116+
baseVersion.Version.SemanticVersion,
117+
context.Repository.ObjectDatabase.FindMergeBase(parents[0], parents[1]),
118+
baseVersion.Version.BranchNameOverride);
119+
}
120+
}
121+
}
122+
}
123+
124+
private bool ReleaseBranchExistsInRepo(GitVersionContext context)
125+
{
126+
var releaseBranchConfig = context.FullConfiguration.Branches
127+
.Where(b => b.Value.IsReleaseBranch == true)
128+
.ToList();
129+
var releaseBranches = context.Repository.Branches
130+
.Where(b => releaseBranchConfig.Any(c => Regex.IsMatch(b.FriendlyName, c.Value.Regex)));
131+
return releaseBranches.Any();
132+
}
133+
134+
private class Versions
135+
{
136+
public SemanticVersion IncrementedVersion { get; set; }
137+
public BaseVersion Version { get; set; }
138+
}
95139
}
96-
}
140+
}

0 commit comments

Comments
 (0)