@@ -12,6 +12,7 @@ import { DOTNET_INFORMATION_CACHE_DURATION_MS } from './CacheTimeConstants';
12
12
import { IAcquisitionWorkerContext } from './IAcquisitionWorkerContext' ;
13
13
import { IDotnetConditionValidator } from './IDotnetConditionValidator' ;
14
14
import { IDotnetListInfo } from './IDotnetListInfo' ;
15
+ import { InstallRecordWithPath } from './InstallRecordWithPath' ;
15
16
import * as versionUtils from './VersionUtilities' ;
16
17
17
18
type simplifiedVersionSpec = 'equal' | 'greater_than_or_equal' | 'less_than_or_equal' |
@@ -172,35 +173,11 @@ Please set the PATH to a dotnet host that matches the architecture ${requirement
172
173
173
174
if ( availableMinor === requestedMinor && requestedPatch )
174
175
{
175
- const availablePatchStr : string | null = requirement . acquireContext . mode !== 'sdk' ?
176
- versionUtils . getRuntimePatchVersionString ( availableVersion , this . workerContext . eventStream , this . workerContext )
177
- :
178
- ( ( ) =>
179
- {
180
- const band = versionUtils . getSDKCompleteBandAndPatchVersionString ( availableVersion , this . workerContext . eventStream , this . workerContext ) ;
181
- if ( band )
182
- {
183
- return band ;
184
- }
185
- return null ;
186
- } ) ( ) ;
187
- const availablePatch = availablePatchStr ? Number ( availablePatchStr ) : null ;
188
-
189
- const availableBandStr : string | null = requirement . acquireContext . mode === 'sdk' ?
190
- ( ( ) =>
191
- {
192
- const featureBand = versionUtils . getFeatureBandFromVersion ( availableVersion , this . workerContext . eventStream , this . workerContext , false ) ;
193
- if ( featureBand )
194
- {
195
- return featureBand ;
196
- }
197
- return null ;
198
- } ) ( ) : null ;
199
- const availableBand = availableBandStr ? Number ( availableBandStr ) : null ;
176
+ const availablePatch = this . getPatchOrFeatureBandWithPatch ( availableVersion , requirement ) ;
200
177
201
178
switch ( adjustedVersionSpec )
202
179
{
203
- // the 'availablePatch' must exist, since the version is from --list-runtimes or --list-sdks.
180
+ // the 'availablePatch' must exist, since the version is from --list-runtimes or --list-sdks, or our internal tracking of installs .
204
181
case 'equal' :
205
182
return availablePatch === requestedPatch ;
206
183
case 'greater_than_or_equal' :
@@ -209,6 +186,7 @@ Please set the PATH to a dotnet host that matches the architecture ${requirement
209
186
case 'less_than_or_equal' :
210
187
return availablePatch ! <= requestedPatch ;
211
188
case 'latestPatch' :
189
+ const availableBand = this . getFeatureBand ( availableVersion , requirement ) ;
212
190
const requestedBandStr = requirement . acquireContext . mode === 'sdk' ? versionUtils . getFeatureBandFromVersion ( requestedVersion , this . workerContext . eventStream , this . workerContext , false ) ?? null : null ;
213
191
const requestedBand = requestedBandStr ? Number ( requestedBandStr ) : null ;
214
192
return availablePatch ! >= requestedPatch && ( availableBand ? availableBand === requestedBand : true ) ;
@@ -226,7 +204,10 @@ Please set the PATH to a dotnet host that matches the architecture ${requirement
226
204
return availableMinor <= requestedMinor ;
227
205
case 'latestPatch' :
228
206
case 'latestFeature' :
229
- return false
207
+ const availableBand = this . getFeatureBand ( availableVersion , requirement ) ;
208
+ const requestedBandStr = requirement . acquireContext . mode === 'sdk' ? versionUtils . getFeatureBandFromVersion ( requestedVersion , this . workerContext . eventStream , this . workerContext , false ) ?? null : null ;
209
+ const requestedBand = requestedBandStr ? Number ( requestedBandStr ) : null ;
210
+ return availableMinor === requestedMinor && ( availableBand ? availableBand === requestedBand : true ) ;
230
211
}
231
212
}
232
213
}
@@ -247,6 +228,45 @@ Please set the PATH to a dotnet host that matches the architecture ${requirement
247
228
}
248
229
}
249
230
231
+ private getFeatureBand ( availableVersion : string , requirement : IDotnetFindPathContext ) : number | null
232
+ {
233
+ const availableBandStr : string | null = requirement . acquireContext . mode === 'sdk' ?
234
+ ( ( ) =>
235
+ {
236
+ const featureBand = versionUtils . getFeatureBandFromVersion ( availableVersion , this . workerContext . eventStream , this . workerContext , false ) ;
237
+ if ( featureBand )
238
+ {
239
+ return featureBand ;
240
+ }
241
+ return null ;
242
+ } ) ( ) : null ;
243
+ return availableBandStr ? Number ( availableBandStr ) : null ;
244
+ }
245
+
246
+ private getPatchOrFeatureBandWithPatch ( availableVersion : string , requirement : IDotnetFindPathContext ) : number | null
247
+ {
248
+ const availablePatchStr : string | null = requirement . acquireContext . mode !== 'sdk' ?
249
+ versionUtils . getRuntimePatchVersionString ( availableVersion , this . workerContext . eventStream , this . workerContext )
250
+ :
251
+ ( ( ) =>
252
+ {
253
+ const band = versionUtils . getSDKCompleteBandAndPatchVersionString ( availableVersion , this . workerContext . eventStream , this . workerContext ) ;
254
+ if ( band )
255
+ {
256
+ return band ;
257
+ }
258
+ return null ;
259
+ } ) ( ) ;
260
+
261
+ const availablePatch = availablePatchStr ? Number ( availablePatchStr ) : null ;
262
+ return availablePatch ;
263
+ }
264
+
265
+ public filterValidPaths ( recordPaths : InstallRecordWithPath [ ] , requirement : IDotnetFindPathContext ) : InstallRecordWithPath [ ]
266
+ {
267
+ return recordPaths . filter ( installInfo => this . stringVersionMeetsRequirement ( installInfo . installRecord . dotnetInstall . version , requirement . acquireContext . version , requirement ) ) ;
268
+ }
269
+
250
270
private stringArchitectureMeetsRequirement ( outputArchitecture : string , requiredArchitecture : string | null | undefined ) : boolean
251
271
{
252
272
return ! requiredArchitecture || ! outputArchitecture || FileUtilities . dotnetInfoArchToNodeArch ( outputArchitecture , this . workerContext . eventStream ) === requiredArchitecture ;
0 commit comments