Skip to content

Commit 5a78b67

Browse files
authored
Merge pull request #27064 from dotnet/marcpopMSFT-portprintdownloadfix
Fix for --print-download-link only
2 parents 017b94d + e787b0a commit 5a78b67

File tree

6 files changed

+33
-22
lines changed

6 files changed

+33
-22
lines changed

src/Cli/dotnet/commands/InstallingWorkloadCommand.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ internal abstract class InstallingWorkloadCommand : WorkloadCommandBase
3737
protected readonly string _userProfileDir;
3838
protected readonly bool _checkIfManifestExist;
3939
protected readonly ReleaseVersion _sdkVersion;
40+
protected readonly ReleaseVersion _installedSdkVersion;
4041
protected readonly SdkFeatureBand _sdkFeatureBand;
4142
protected readonly SdkFeatureBand _installedFeatureBand;
4243
protected readonly string _fromRollbackDefinition;
@@ -70,17 +71,17 @@ public InstallingWorkloadCommand(
7071
_checkIfManifestExist = !(_printDownloadLinkOnly); // don't check for manifest existence when print download link is passed
7172
_sdkVersion = WorkloadOptionsExtensions.GetValidatedSdkVersion(parseResult.GetValueForOption(InstallingWorkloadCommandParser.VersionOption), version, _dotnetPath, _userProfileDir, _checkIfManifestExist);
7273
_sdkFeatureBand = new SdkFeatureBand(_sdkVersion);
73-
74-
_installedFeatureBand = installedFeatureBand == null ? new SdkFeatureBand(Product.Version) : new SdkFeatureBand(installedFeatureBand);
74+
_installedSdkVersion = new ReleaseVersion(version ?? Product.Version);
75+
_installedFeatureBand = new SdkFeatureBand(installedFeatureBand ?? Product.Version);
7576

7677
_fromRollbackDefinition = parseResult.GetValueForOption(InstallingWorkloadCommandParser.FromRollbackFileOption);
7778
var configOption = parseResult.GetValueForOption(InstallingWorkloadCommandParser.ConfigOption);
7879
var sourceOption = parseResult.GetValueForOption(InstallingWorkloadCommandParser.SourceOption);
7980
_packageSourceLocation = string.IsNullOrEmpty(configOption) && (sourceOption == null || !sourceOption.Any()) ? null :
8081
new PackageSourceLocation(string.IsNullOrEmpty(configOption) ? null : new FilePath(configOption), sourceFeedOverrides: sourceOption);
8182

82-
var sdkWorkloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, _sdkVersion.ToString(), userProfileDir);
83-
_workloadResolver = workloadResolver ?? WorkloadResolver.Create(sdkWorkloadManifestProvider, _dotnetPath, _sdkVersion.ToString(), _userProfileDir);
83+
var sdkWorkloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, _installedSdkVersion.ToString(), userProfileDir);
84+
_workloadResolver = workloadResolver ?? WorkloadResolver.Create(sdkWorkloadManifestProvider, _dotnetPath, _installedSdkVersion.ToString(), _userProfileDir);
8485

8586
_workloadInstallerFromConstructor = workloadInstaller;
8687
_workloadManifestUpdaterFromConstructor = workloadManifestUpdater;
@@ -109,7 +110,7 @@ protected async Task<List<WorkloadDownload>> GetDownloads(IEnumerable<WorkloadId
109110
folderForManifestDownloads = tempPath.Value;
110111
}
111112

112-
var manifestDownloads = await _workloadManifestUpdater.GetManifestPackageDownloadsAsync(includePreview);
113+
var manifestDownloads = await _workloadManifestUpdater.GetManifestPackageDownloadsAsync(includePreview, _sdkFeatureBand, _installedFeatureBand);
113114

114115
if (!manifestDownloads.Any())
115116
{
@@ -130,7 +131,7 @@ protected async Task<List<WorkloadDownload>> GetDownloads(IEnumerable<WorkloadId
130131
}
131132

132133
// Use updated, extracted manifests to resolve packs
133-
var overlayProvider = new TempDirectoryWorkloadManifestProvider(extractedManifestsPath, _sdkVersion.ToString());
134+
var overlayProvider = new TempDirectoryWorkloadManifestProvider(extractedManifestsPath, _sdkFeatureBand.ToString());
134135

135136
var newResolver = _workloadResolver.CreateOverlayResolver(overlayProvider);
136137
_workloadInstaller.ReplaceWorkloadResolver(newResolver);

src/Cli/dotnet/commands/dotnet-workload/install/IWorkloadManifestUpdater.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Dictionary<WorkloadId, WorkloadDefinition> Workloads
2323
IEnumerable<ManifestVersionUpdate>
2424
CalculateManifestRollbacks(string rollbackDefinitionFilePath);
2525

26-
Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews);
26+
Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews, SdkFeatureBand providedSdkFeatureBand, SdkFeatureBand installedSdkFeatureBand);
2727

2828
IEnumerable<WorkloadId> GetUpdatableWorkloadsToAdvertise(IEnumerable<WorkloadId> installedWorkloads);
2929

src/Cli/dotnet/commands/dotnet-workload/install/WorkloadManifestUpdater.cs

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,15 @@ public WorkloadManifestUpdater(IReporter reporter,
4646
IWorkloadManifestInstaller workloadManifestInstaller,
4747
PackageSourceLocation packageSourceLocation = null,
4848
Func<string, string> getEnvironmentVariable = null,
49-
bool displayManifestUpdates = true)
49+
bool displayManifestUpdates = true,
50+
SdkFeatureBand? sdkFeatureBand = null)
5051
{
5152
_reporter = reporter;
5253
_workloadResolver = workloadResolver;
5354
_userProfileDir = userProfileDir;
5455
_tempDirPath = tempDirPath;
5556
_nugetPackageDownloader = nugetPackageDownloader;
56-
_sdkFeatureBand = new SdkFeatureBand(_workloadResolver.GetSdkFeatureBand());
57+
_sdkFeatureBand = sdkFeatureBand ?? new SdkFeatureBand(_workloadResolver.GetSdkFeatureBand());
5758
_packageSourceLocation = packageSourceLocation;
5859
_getEnvironmentVariable = getEnvironmentVariable ?? Environment.GetEnvironmentVariable;
5960
_workloadRecordRepo = workloadRecordRepo;
@@ -239,29 +240,26 @@ public IEnumerable<ManifestVersionUpdate> CalculateManifestRollbacks(string roll
239240
}
240241

241242

242-
public async Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews)
243+
public async Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews, SdkFeatureBand providedSdkFeatureBand, SdkFeatureBand installedSdkFeatureBand)
243244
{
244-
var packageIds = GetInstalledManifestIds()
245-
.Select(manifestId => _workloadManifestInstaller.GetManifestPackageId(manifestId, _sdkFeatureBand));
246-
247245
var downloads = new List<WorkloadDownload>();
248246
foreach (var manifest in _workloadResolver.GetInstalledManifests())
249247
{
250248
try
251249
{
252-
253-
var packageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), _sdkFeatureBand);
250+
var packageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), providedSdkFeatureBand);
254251

255252
bool success;
253+
// After checking the --sdk-version, check the current sdk band, and then the manifest band in that order
256254
(success, var latestVersion) = await GetPackageVersion(packageId, packageSourceLocation: _packageSourceLocation, includePreview: includePreviews);
257255
if (success)
258256
{
259257
downloads.Add(new WorkloadDownload(manifest.Id, packageId.ToString(), latestVersion.ToString()));
260258
}
261-
if (!success)
259+
260+
if (!success && !installedSdkFeatureBand.Equals(providedSdkFeatureBand))
262261
{
263-
var newFeatureBand = new SdkFeatureBand(manifest.ManifestFeatureBand);
264-
var newPackageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), newFeatureBand);
262+
var newPackageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), installedSdkFeatureBand);
265263

266264
(success, latestVersion) = await GetPackageVersion(newPackageId, packageSourceLocation: _packageSourceLocation, includePreview: includePreviews);
267265

@@ -270,6 +268,18 @@ public async Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsyn
270268
downloads.Add(new WorkloadDownload(manifest.Id, newPackageId.ToString(), latestVersion.ToString()));
271269
}
272270
}
271+
var fallbackFeatureBand = new SdkFeatureBand(manifest.ManifestFeatureBand);
272+
if (!success && !fallbackFeatureBand.Equals(installedSdkFeatureBand))
273+
{
274+
var newPackageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), fallbackFeatureBand);
275+
276+
(success, latestVersion) = await GetPackageVersion(newPackageId, packageSourceLocation: _packageSourceLocation, includePreview: includePreviews);
277+
278+
if (success)
279+
{
280+
downloads.Add(new WorkloadDownload(manifest.Id, newPackageId.ToString(), latestVersion.ToString()));
281+
}
282+
}
273283
if (!success)
274284
{
275285
_reporter.WriteLine(string.Format(LocalizableStrings.ManifestPackageUrlNotResolved, packageId));

src/Cli/dotnet/commands/dotnet-workload/update/WorkloadUpdateCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public WorkloadUpdateCommand(
5757
elevationRequired: !_printDownloadLinkOnly && !_printRollbackDefinitionOnly && string.IsNullOrWhiteSpace(_downloadToCacheOption));
5858

5959
_workloadManifestUpdater = _workloadManifestUpdaterFromConstructor ?? new WorkloadManifestUpdater(Reporter, workloadResolver ?? _workloadResolver, PackageDownloader, _userProfileDir, TempDirectoryPath,
60-
_workloadInstaller.GetWorkloadInstallationRecordRepository(), _workloadInstaller, _packageSourceLocation);
60+
_workloadInstaller.GetWorkloadInstallationRecordRepository(), _workloadInstaller, _packageSourceLocation, sdkFeatureBand: _sdkFeatureBand);
6161
}
6262

6363

src/Resolvers/Microsoft.NET.Sdk.WorkloadManifestReader/TempDirectoryWorkloadManifestProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ public class TempDirectoryWorkloadManifestProvider : IWorkloadManifestProvider
1313
private readonly string _manifestsPath;
1414
private readonly string _sdkVersionBand;
1515

16-
public TempDirectoryWorkloadManifestProvider(string manifestsPath, string sdkVersion)
16+
public TempDirectoryWorkloadManifestProvider(string manifestsPath, string sdkFeatureBand)
1717
{
1818
_manifestsPath = manifestsPath;
19-
_sdkVersionBand = sdkVersion;
19+
_sdkVersionBand = sdkFeatureBand;
2020
}
2121

2222
public IEnumerable<ReadableWorkloadManifest>

src/Tests/dotnet-workload-install.Tests/MockWorkloadManifestUpdater.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public Task UpdateAdvertisingManifestsAsync(bool includePreview, DirectoryPath?
4343
return _manifestUpdates;
4444
}
4545

46-
public Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews)
46+
public Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews, SdkFeatureBand providedSdkFeatureBand, SdkFeatureBand installedSdkFeatureBand)
4747
{
4848
GetManifestPackageDownloadsCallCount++;
4949
return Task.FromResult<IEnumerable<WorkloadDownload>>(new List<WorkloadDownload>()

0 commit comments

Comments
 (0)