Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions src/Cli/dotnet/commands/InstallingWorkloadCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ internal abstract class InstallingWorkloadCommand : WorkloadCommandBase
protected readonly string _userProfileDir;
protected readonly bool _checkIfManifestExist;
protected readonly ReleaseVersion _sdkVersion;
protected readonly ReleaseVersion _installedSdkVersion;
protected readonly SdkFeatureBand _sdkFeatureBand;
protected readonly SdkFeatureBand _installedFeatureBand;
protected readonly string _fromRollbackDefinition;
Expand Down Expand Up @@ -70,17 +71,17 @@ public InstallingWorkloadCommand(
_checkIfManifestExist = !(_printDownloadLinkOnly); // don't check for manifest existence when print download link is passed
_sdkVersion = WorkloadOptionsExtensions.GetValidatedSdkVersion(parseResult.GetValueForOption(InstallingWorkloadCommandParser.VersionOption), version, _dotnetPath, _userProfileDir, _checkIfManifestExist);
_sdkFeatureBand = new SdkFeatureBand(_sdkVersion);

_installedFeatureBand = installedFeatureBand == null ? new SdkFeatureBand(Product.Version) : new SdkFeatureBand(installedFeatureBand);
_installedSdkVersion = new ReleaseVersion(version ?? Product.Version);
_installedFeatureBand = new SdkFeatureBand(installedFeatureBand ?? Product.Version);

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

var sdkWorkloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, _sdkVersion.ToString(), userProfileDir);
_workloadResolver = workloadResolver ?? WorkloadResolver.Create(sdkWorkloadManifestProvider, _dotnetPath, _sdkVersion.ToString(), _userProfileDir);
var sdkWorkloadManifestProvider = new SdkDirectoryWorkloadManifestProvider(_dotnetPath, _installedSdkVersion.ToString(), userProfileDir);
_workloadResolver = workloadResolver ?? WorkloadResolver.Create(sdkWorkloadManifestProvider, _dotnetPath, _installedSdkVersion.ToString(), _userProfileDir);

_workloadInstallerFromConstructor = workloadInstaller;
_workloadManifestUpdaterFromConstructor = workloadManifestUpdater;
Expand Down Expand Up @@ -109,7 +110,7 @@ protected async Task<List<WorkloadDownload>> GetDownloads(IEnumerable<WorkloadId
folderForManifestDownloads = tempPath.Value;
}

var manifestDownloads = await _workloadManifestUpdater.GetManifestPackageDownloadsAsync(includePreview);
var manifestDownloads = await _workloadManifestUpdater.GetManifestPackageDownloadsAsync(includePreview, _sdkFeatureBand, _installedFeatureBand);

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

// Use updated, extracted manifests to resolve packs
var overlayProvider = new TempDirectoryWorkloadManifestProvider(extractedManifestsPath, _sdkVersion.ToString());
var overlayProvider = new TempDirectoryWorkloadManifestProvider(extractedManifestsPath, _sdkFeatureBand.ToString());

var newResolver = _workloadResolver.CreateOverlayResolver(overlayProvider);
_workloadInstaller.ReplaceWorkloadResolver(newResolver);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Dictionary<WorkloadId, WorkloadDefinition> Workloads
IEnumerable<ManifestVersionUpdate>
CalculateManifestRollbacks(string rollbackDefinitionFilePath);

Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews);
Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews, SdkFeatureBand providedSdkFeatureBand, SdkFeatureBand installedSdkFeatureBand);

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,15 @@ public WorkloadManifestUpdater(IReporter reporter,
IWorkloadManifestInstaller workloadManifestInstaller,
PackageSourceLocation packageSourceLocation = null,
Func<string, string> getEnvironmentVariable = null,
bool displayManifestUpdates = true)
bool displayManifestUpdates = true,
SdkFeatureBand? sdkFeatureBand = null)
{
_reporter = reporter;
_workloadResolver = workloadResolver;
_userProfileDir = userProfileDir;
_tempDirPath = tempDirPath;
_nugetPackageDownloader = nugetPackageDownloader;
_sdkFeatureBand = new SdkFeatureBand(_workloadResolver.GetSdkFeatureBand());
_sdkFeatureBand = sdkFeatureBand ?? new SdkFeatureBand(_workloadResolver.GetSdkFeatureBand());
_packageSourceLocation = packageSourceLocation;
_getEnvironmentVariable = getEnvironmentVariable ?? Environment.GetEnvironmentVariable;
_workloadRecordRepo = workloadRecordRepo;
Expand Down Expand Up @@ -239,29 +240,26 @@ public IEnumerable<ManifestVersionUpdate> CalculateManifestRollbacks(string roll
}


public async Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews)
public async Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews, SdkFeatureBand providedSdkFeatureBand, SdkFeatureBand installedSdkFeatureBand)
{
var packageIds = GetInstalledManifestIds()
.Select(manifestId => _workloadManifestInstaller.GetManifestPackageId(manifestId, _sdkFeatureBand));

var downloads = new List<WorkloadDownload>();
foreach (var manifest in _workloadResolver.GetInstalledManifests())
{
try
{

var packageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), _sdkFeatureBand);
var packageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), providedSdkFeatureBand);

bool success;
// After checking the --sdk-version, check the current sdk band, and then the manifest band in that order
(success, var latestVersion) = await GetPackageVersion(packageId, packageSourceLocation: _packageSourceLocation, includePreview: includePreviews);
if (success)
{
downloads.Add(new WorkloadDownload(manifest.Id, packageId.ToString(), latestVersion.ToString()));
}
if (!success)

if (!success && !installedSdkFeatureBand.Equals(providedSdkFeatureBand))
{
var newFeatureBand = new SdkFeatureBand(manifest.ManifestFeatureBand);
var newPackageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), newFeatureBand);
var newPackageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), installedSdkFeatureBand);

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

Expand All @@ -270,6 +268,18 @@ public async Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsyn
downloads.Add(new WorkloadDownload(manifest.Id, newPackageId.ToString(), latestVersion.ToString()));
}
}
var fallbackFeatureBand = new SdkFeatureBand(manifest.ManifestFeatureBand);
if (!success && !fallbackFeatureBand.Equals(installedSdkFeatureBand))
{
var newPackageId = _workloadManifestInstaller.GetManifestPackageId(new ManifestId(manifest.Id), fallbackFeatureBand);

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

if (success)
{
downloads.Add(new WorkloadDownload(manifest.Id, newPackageId.ToString(), latestVersion.ToString()));
}
}
if (!success)
{
_reporter.WriteLine(string.Format(LocalizableStrings.ManifestPackageUrlNotResolved, packageId));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public WorkloadUpdateCommand(
elevationRequired: !_printDownloadLinkOnly && !_printRollbackDefinitionOnly && string.IsNullOrWhiteSpace(_downloadToCacheOption));

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


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ public class TempDirectoryWorkloadManifestProvider : IWorkloadManifestProvider
private readonly string _manifestsPath;
private readonly string _sdkVersionBand;

public TempDirectoryWorkloadManifestProvider(string manifestsPath, string sdkVersion)
public TempDirectoryWorkloadManifestProvider(string manifestsPath, string sdkFeatureBand)
{
_manifestsPath = manifestsPath;
_sdkVersionBand = sdkVersion;
_sdkVersionBand = sdkFeatureBand;
}

public IEnumerable<ReadableWorkloadManifest>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public Task UpdateAdvertisingManifestsAsync(bool includePreview, DirectoryPath?
return _manifestUpdates;
}

public Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews)
public Task<IEnumerable<WorkloadDownload>> GetManifestPackageDownloadsAsync(bool includePreviews, SdkFeatureBand providedSdkFeatureBand, SdkFeatureBand installedSdkFeatureBand)
{
GetManifestPackageDownloadsCallCount++;
return Task.FromResult<IEnumerable<WorkloadDownload>>(new List<WorkloadDownload>()
Expand Down