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