@@ -50,129 +50,132 @@ public virtual NextVersion FindVersion()
50
50
this . log . Info ( $ "Current commit is tagged with version { Context . CurrentCommitTaggedVersion } , version calculation is for meta data only.") ;
51
51
}
52
52
53
- var nextVersion = Calculate ( Context . CurrentBranch , Context . Configuration ) ;
53
+ var nextVersion = CalculateNextVersion ( Context . CurrentBranch , Context . Configuration ) ;
54
54
var incrementedVersion = CalculateIncrementedVersion ( nextVersion . Configuration . VersioningMode , nextVersion ) ;
55
55
return new ( incrementedVersion , nextVersion . BaseVersion , new ( nextVersion . Branch , nextVersion . Configuration ) ) ;
56
56
}
57
57
58
58
private SemanticVersion CalculateIncrementedVersion ( VersioningMode versioningMode , NextVersion nextVersion ) => versioningMode switch
59
59
{
60
60
VersioningMode . ContinuousDelivery => this . manualDeploymentVersionCalculator . Calculate ( nextVersion ) ,
61
- VersioningMode . ContinuousDeployment => nextVersion . Configuration . IsMainline && nextVersion . Configuration . Label is null
61
+ VersioningMode . ContinuousDeployment => nextVersion . Configuration is { IsMainline : true , Label : null }
62
62
? this . continuousDeploymentVersionCalculator . Calculate ( nextVersion )
63
63
: this . continuousDeliveryVersionCalculator . Calculate ( nextVersion ) ,
64
64
VersioningMode . Mainline => this . mainlineVersionCalculator . FindMainlineModeVersion ( nextVersion ) ,
65
65
_ => throw new InvalidEnumArgumentException ( nameof ( versioningMode ) , ( int ) versioningMode , typeof ( VersioningMode ) ) ,
66
66
} ;
67
67
68
- private NextVersion Calculate ( IBranch branch , IGitVersionConfiguration configuration )
68
+ private NextVersion CalculateNextVersion ( IBranch branch , IGitVersionConfiguration configuration )
69
69
{
70
- using ( log . IndentLog ( "Calculating the base versions" ) )
71
- {
72
- var nextVersions = GetNextVersions ( branch , configuration ) . ToArray ( ) ;
73
- var maxVersion = nextVersions . Max ( ) ! ;
70
+ var nextVersions = GetNextVersions ( branch , configuration ) . ToArray ( ) ;
71
+ log . Separator ( ) ;
72
+ var maxVersion = nextVersions . Max ( ) ! ;
74
73
75
- var matchingVersionsOnceIncremented = nextVersions
76
- . Where ( v => v . BaseVersion . BaseVersionSource != null && v . IncrementedVersion == maxVersion . IncrementedVersion )
77
- . ToList ( ) ;
78
- ICommit ? latestBaseVersionSource ;
74
+ var matchingVersionsOnceIncremented = nextVersions
75
+ . Where ( v => v . BaseVersion . BaseVersionSource != null && v . IncrementedVersion == maxVersion . IncrementedVersion )
76
+ . ToList ( ) ;
77
+ ICommit ? latestBaseVersionSource ;
79
78
80
- if ( matchingVersionsOnceIncremented . Any ( ) )
79
+ if ( matchingVersionsOnceIncremented . Any ( ) )
80
+ {
81
+ var latestVersion = matchingVersionsOnceIncremented . Aggregate ( CompareVersions ) ;
82
+ latestBaseVersionSource = latestVersion . BaseVersion . BaseVersionSource ;
83
+ maxVersion = latestVersion ;
84
+ log . Info (
85
+ $ "Found multiple base versions which will produce the same SemVer ({ maxVersion . IncrementedVersion } ), " +
86
+ $ "taking oldest source for commit counting ({ latestVersion . BaseVersion . Source } )") ;
87
+ }
88
+ else
89
+ {
90
+ IEnumerable < NextVersion > filteredVersions = nextVersions ;
91
+ if ( ! maxVersion . IncrementedVersion . PreReleaseTag . HasTag ( ) )
81
92
{
82
- static NextVersion CompareVersions (
83
- NextVersion versions1 ,
84
- NextVersion version2 )
85
- {
86
- if ( versions1 . BaseVersion . BaseVersionSource == null )
87
- {
88
- return version2 ;
89
- }
90
- if ( version2 . BaseVersion . BaseVersionSource == null )
91
- {
92
- return versions1 ;
93
- }
93
+ // If the maximal version has no pre-release tag defined than we want to determine just the latest previous
94
+ // base source which are not coming from pre-release tag.
95
+ filteredVersions = filteredVersions . Where ( v => ! v . BaseVersion . SemanticVersion . PreReleaseTag . HasTag ( ) ) ;
96
+ }
94
97
95
- return versions1 . BaseVersion . BaseVersionSource . When
96
- < version2 . BaseVersion . BaseVersionSource . When ? versions1 : version2 ;
97
- }
98
+ var versions = filteredVersions as NextVersion [ ] ?? filteredVersions . ToArray ( ) ;
99
+ var version = versions
100
+ . Where ( v => v . BaseVersion . BaseVersionSource != null )
101
+ . OrderByDescending ( v => v . IncrementedVersion )
102
+ . ThenByDescending ( v => v . BaseVersion . BaseVersionSource ? . When )
103
+ . FirstOrDefault ( ) ;
104
+
105
+ version ??= versions . Where ( v => v . BaseVersion . BaseVersionSource == null )
106
+ . OrderByDescending ( v => v . IncrementedVersion )
107
+ . First ( ) ;
108
+ latestBaseVersionSource = version . BaseVersion . BaseVersionSource ;
109
+ }
98
110
99
- var latestVersion = matchingVersionsOnceIncremented . Aggregate ( CompareVersions ) ;
100
- latestBaseVersionSource = latestVersion . BaseVersion . BaseVersionSource ;
101
- maxVersion = latestVersion ;
102
- log . Info ( $ "Found multiple base versions which will produce the same SemVer ({ maxVersion . IncrementedVersion } )," +
103
- $ " taking oldest source for commit counting ({ latestVersion . BaseVersion . Source } )") ;
104
- }
105
- else
106
- {
107
- IEnumerable < NextVersion > filteredVersions = nextVersions ;
108
- if ( ! maxVersion . IncrementedVersion . PreReleaseTag . HasTag ( ) )
109
- {
110
- // If the maximal version has no pre-release tag defined than we want to determine just the latest previous
111
- // base source which are not coming from pre-release tag.
112
- filteredVersions = filteredVersions . Where ( v => ! v . BaseVersion . SemanticVersion . PreReleaseTag . HasTag ( ) ) ;
113
- }
111
+ var calculatedBase = new BaseVersion (
112
+ maxVersion . BaseVersion . Source ,
113
+ maxVersion . BaseVersion . ShouldIncrement ,
114
+ maxVersion . BaseVersion . SemanticVersion ,
115
+ latestBaseVersionSource ,
116
+ maxVersion . BaseVersion . BranchNameOverride
117
+ ) ;
114
118
115
- var versions = filteredVersions as NextVersion [ ] ?? filteredVersions . ToArray ( ) ;
116
- var version = versions
117
- . Where ( v => v . BaseVersion . BaseVersionSource != null )
118
- . OrderByDescending ( v => v . IncrementedVersion )
119
- . ThenByDescending ( v => v . BaseVersion . BaseVersionSource ? . When )
120
- . FirstOrDefault ( ) ;
121
-
122
- version ??= versions . Where ( v => v . BaseVersion . BaseVersionSource == null )
123
- . OrderByDescending ( v => v . IncrementedVersion )
124
- . First ( ) ;
125
- latestBaseVersionSource = version . BaseVersion . BaseVersionSource ;
126
- }
119
+ log . Info ( $ "Base version used: { calculatedBase } ") ;
120
+ log . Separator ( ) ;
121
+ return new NextVersion ( maxVersion . IncrementedVersion , calculatedBase , maxVersion . Branch , maxVersion . Configuration ) ;
122
+ }
127
123
128
- var calculatedBase = new BaseVersion (
129
- maxVersion . BaseVersion . Source ,
130
- maxVersion . BaseVersion . ShouldIncrement ,
131
- maxVersion . BaseVersion . SemanticVersion ,
132
- latestBaseVersionSource ,
133
- maxVersion . BaseVersion . BranchNameOverride
134
- ) ;
124
+ private static NextVersion CompareVersions ( NextVersion versions1 , NextVersion version2 )
125
+ {
126
+ if ( versions1 . BaseVersion . BaseVersionSource == null )
127
+ return version2 ;
135
128
136
- log . Info ( $ "Base version used: { calculatedBase } ") ;
129
+ if ( version2 . BaseVersion . BaseVersionSource == null )
130
+ return versions1 ;
137
131
138
- return new NextVersion ( maxVersion . IncrementedVersion , calculatedBase , maxVersion . Branch , maxVersion . Configuration ) ;
139
- }
132
+ return versions1 . BaseVersion . BaseVersionSource . When < version2 . BaseVersion . BaseVersionSource . When
133
+ ? versions1
134
+ : version2 ;
140
135
}
141
136
142
137
private IReadOnlyCollection < NextVersion > GetNextVersions ( IBranch branch , IGitVersionConfiguration configuration )
143
138
{
144
- if ( branch . Tip == null )
145
- throw new GitVersionException ( "No commits found on the current branch." ) ;
139
+ using ( log . IndentLog ( "Fetching the base versions for version calculation..." ) )
140
+ {
141
+ if ( branch . Tip == null )
142
+ throw new GitVersionException ( "No commits found on the current branch." ) ;
146
143
147
- var nextVersions = GetNextVersionsInternal ( ) . ToList ( ) ;
148
- if ( nextVersions . Count == 0 )
149
- throw new GitVersionException ( "No base versions determined on the current branch." ) ;
150
- return nextVersions ;
144
+ var nextVersions = GetNextVersionsInternal ( ) . ToList ( ) ;
145
+ if ( nextVersions . Count == 0 )
146
+ throw new GitVersionException ( "No base versions determined on the current branch." ) ;
147
+ return nextVersions ;
148
+ }
151
149
152
150
IEnumerable < NextVersion > GetNextVersionsInternal ( )
153
151
{
154
- foreach ( var effectiveConfiguration in effectiveBranchConfigurationFinder . GetConfigurations ( branch , configuration ) )
152
+ var effectiveBranchConfigurations = this . effectiveBranchConfigurationFinder . GetConfigurations ( branch , configuration ) . ToArray ( ) ;
153
+ foreach ( var effectiveBranchConfiguration in effectiveBranchConfigurations )
155
154
{
155
+ this . log . Info ( $ "Calculating base versions for '{ effectiveBranchConfiguration . Branch . Name } '") ;
156
156
var atLeastOneBaseVersionReturned = false ;
157
157
foreach ( var versionStrategy in this . versionStrategies )
158
158
{
159
- foreach ( var baseVersion in versionStrategy . GetBaseVersions ( effectiveConfiguration ) )
159
+ using ( this . log . IndentLog ( $ "[Using ' { versionStrategy . GetType ( ) . Name } ' strategy]" ) )
160
160
{
161
- log . Info ( baseVersion . ToString ( ) ) ;
162
-
163
- if ( IncludeVersion ( baseVersion , configuration . Ignore )
164
- && TryGetNextVersion ( out var nextVersion , effectiveConfiguration , baseVersion ) )
161
+ foreach ( var baseVersion in versionStrategy . GetBaseVersions ( effectiveBranchConfiguration ) )
165
162
{
166
- yield return nextVersion ;
167
- atLeastOneBaseVersionReturned = true ;
163
+ log . Info ( baseVersion . ToString ( ) ) ;
164
+ if ( IncludeVersion ( baseVersion , configuration . Ignore )
165
+ && TryGetNextVersion ( out var nextVersion , effectiveBranchConfiguration , baseVersion ) )
166
+ {
167
+ yield return nextVersion ;
168
+ atLeastOneBaseVersionReturned = true ;
169
+ }
168
170
}
169
171
}
170
172
}
171
173
172
174
if ( ! atLeastOneBaseVersionReturned )
173
175
{
174
176
var baseVersion = new BaseVersion ( "Fallback base version" , true , SemanticVersion . Empty , null , null ) ;
175
- if ( TryGetNextVersion ( out var nextVersion , effectiveConfiguration , baseVersion ) ) yield return nextVersion ;
177
+ if ( TryGetNextVersion ( out var nextVersion , effectiveBranchConfiguration , baseVersion ) )
178
+ yield return nextVersion ;
176
179
}
177
180
}
178
181
}
@@ -187,7 +190,9 @@ private bool TryGetNextVersion([NotNullWhen(true)] out NextVersion? result,
187
190
Context . CurrentBranch . Name , baseVersion . BranchNameOverride
188
191
) ;
189
192
if ( effectiveConfiguration . Value . Label != label )
193
+ {
190
194
log . Info ( "Using current branch name to calculate version tag" ) ;
195
+ }
191
196
192
197
var incrementedVersion = GetIncrementedVersion ( effectiveConfiguration , baseVersion , label ) ;
193
198
if ( incrementedVersion . IsMatchForBranchSpecificLabel ( label ) )
0 commit comments