1
- namespace GitVersion . VersionCalculation
1
+ namespace GitVersion . VersionCalculation
2
2
{
3
3
using System ;
4
+ using System . Collections . Generic ;
4
5
using System . Linq ;
6
+ using System . Text . RegularExpressions ;
5
7
using GitVersion . VersionCalculation . BaseVersionCalculators ;
6
8
7
9
public class BaseVersionCalculator : IBaseVersionCalculator
@@ -37,13 +39,15 @@ public BaseVersion GetBaseVersion(GitVersionContext context)
37
39
38
40
return true ;
39
41
} )
40
- . Select ( v => new
42
+ . Select ( v => new Versions
41
43
{
42
44
IncrementedVersion = MaybeIncrement ( context , v ) ,
43
45
Version = v
44
46
} )
45
47
. ToList ( ) ;
46
48
49
+ FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted
50
+ ( context , baseVersions ) ;
47
51
var maxVersion = baseVersions . Aggregate ( ( v1 , v2 ) => v1 . IncrementedVersion > v2 . IncrementedVersion ? v1 : v2 ) ;
48
52
var matchingVersionsOnceIncremented = baseVersions
49
53
. Where ( b => b . Version . BaseVersionSource != null && b . IncrementedVersion == maxVersion . IncrementedVersion )
@@ -92,5 +96,45 @@ public static SemanticVersion MaybeIncrement(GitVersionContext context, BaseVers
92
96
93
97
return version . SemanticVersion ;
94
98
}
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
+ }
95
139
}
96
- }
140
+ }
0 commit comments