Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Fix the CommitsSinceVersionSource count in case a Release branch was …
…merged and deleted
  • Loading branch information
Ruh Ullah Shah committed Mar 13, 2019
commit c172ffeb5120451b3d3f90ca4acfe7b42c429291
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ public void TagOnHotfixShouldNotAffectDevelop()
}
}

[Test]
public void CommitsSinceVersionSourceShouldNotGoDownUponGitFlowReleaseFinish()
{
var config = new Config
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void NoMergeBacksToDevelopInCaseThereAreChangesInReleaseBranch()
fixture.Repository.MakeACommit();
fixture.Repository.Branches.Remove("release/1.0.0");

fixture.AssertFullSemver("1.1.0-alpha.2");
fixture.AssertFullSemver("1.1.0-alpha.3");
}
}

Expand Down
50 changes: 47 additions & 3 deletions src/GitVersionCore/VersionCalculation/BaseVersionCalculator.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
namespace GitVersion.VersionCalculation
namespace GitVersion.VersionCalculation
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using GitVersion.VersionCalculation.BaseVersionCalculators;

public class BaseVersionCalculator : IBaseVersionCalculator
Expand Down Expand Up @@ -37,13 +39,15 @@ public BaseVersion GetBaseVersion(GitVersionContext context)

return true;
})
.Select(v => new
.Select(v => new Versions
{
IncrementedVersion = MaybeIncrement(context, v),
Version = v
})
.ToList();

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

return version.SemanticVersion;
}

private void FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(
GitVersionContext context, List<Versions> baseVersions)
{
if (!ReleaseBranchExistsInRepo(context))
{
foreach (var baseVersion in baseVersions)
{
if (baseVersion.Version.Source.Contains("Merge message")
&& baseVersion.Version.Source.Contains("Merge branch")
&& baseVersion.Version.Source.Contains("release"))
{
var parents = baseVersion.Version.BaseVersionSource.Parents.ToList();
baseVersion.Version = new BaseVersion(
context,
baseVersion.Version.Source,
baseVersion.Version.ShouldIncrement,
baseVersion.Version.SemanticVersion,
context.Repository.ObjectDatabase.FindMergeBase(parents[0], parents[1]),
baseVersion.Version.BranchNameOverride);
}
}
}
}

private bool ReleaseBranchExistsInRepo(GitVersionContext context)
{
var releaseBranchConfig = context.FullConfiguration.Branches
.Where(b => b.Value.IsReleaseBranch == true)
.ToList();
var releaseBranches = context.Repository.Branches
.Where(b => releaseBranchConfig.Any(c => Regex.IsMatch(b.FriendlyName, c.Value.Regex)));
return releaseBranches.Any();
}

private class Versions
{
public SemanticVersion IncrementedVersion { get; set; }
public BaseVersion Version { get; set; }
}
}
}
}