Skip to content

Commit 9801e2d

Browse files
authored
Use workload sets by default for all workload operations (#45936)
1 parent 4eb6867 commit 9801e2d

File tree

11 files changed

+62
-32
lines changed

11 files changed

+62
-32
lines changed

src/Cli/dotnet/commands/InstallingWorkloadCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ static InstallStateContents GetCurrentInstallState(SdkFeatureBand sdkFeatureBand
171171

172172
public static bool ShouldUseWorkloadSetMode(SdkFeatureBand sdkFeatureBand, string dotnetDir)
173173
{
174-
return GetCurrentInstallState(sdkFeatureBand, dotnetDir).UseWorkloadSets ?? false;
174+
return GetCurrentInstallState(sdkFeatureBand, dotnetDir).ShouldUseWorkloadSets();
175175
}
176176

177177
protected void UpdateWorkloadManifests(WorkloadHistoryRecorder recorder, ITransactionContext context, DirectoryPath? offlineCache)

src/Cli/dotnet/commands/dotnet-workload/InstallStateContents.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4+
using System.ComponentModel;
45
using System.Text.Json;
56
using System.Text.Json.Serialization;
67

@@ -11,6 +12,7 @@ namespace Microsoft.DotNet.Workloads.Workload
1112
internal class InstallStateContents
1213
{
1314
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
15+
[EditorBrowsable(EditorBrowsableState.Never)]
1416
public bool? UseWorkloadSets { get; set; }
1517

1618
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
@@ -40,6 +42,8 @@ public override string ToString()
4042
{
4143
return JsonSerializer.Serialize<InstallStateContents>(this, s_options);
4244
}
45+
46+
public bool ShouldUseWorkloadSets() => UseWorkloadSets ?? true;
4347
}
4448
}
4549

src/Cli/dotnet/commands/dotnet-workload/WorkloadCommandParser.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ internal static void ShowWorkloadsInfo(ParseResult parseResult = null, WorkloadI
5353

5454
void WriteUpdateModeAndAnyError(string indent = "")
5555
{
56-
var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).UseWorkloadSets;
57-
var workloadSetsString = useWorkloadSets == true ? "workload sets" : "loose manifests";
56+
var useWorkloadSets = InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(workloadInfoHelper._currentSdkFeatureBand, workloadInfoHelper.UserLocalPath), "default.json")).ShouldUseWorkloadSets();
57+
var workloadSetsString = useWorkloadSets ? "workload sets" : "loose manifests";
5858
reporter.WriteLine(indent + string.Format(CommonStrings.WorkloadManifestInstallationConfiguration, workloadSetsString));
5959

6060
if (!versionInfo.IsInstalled)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public static bool ShouldUseWorkloadSetMode(SdkFeatureBand sdkFeatureBand, strin
128128
{
129129
string path = Path.Combine(WorkloadInstallType.GetInstallStateFolder(sdkFeatureBand, dotnetDir), "default.json");
130130
var installStateContents = File.Exists(path) ? InstallStateContents.FromString(File.ReadAllText(path)) : new InstallStateContents();
131-
return installStateContents.UseWorkloadSets ?? false;
131+
return installStateContents.ShouldUseWorkloadSets();
132132
}
133133

134134
private void WriteUpdatableWorkloadsFile()

src/Cli/dotnet/commands/dotnet-workload/list/WorkloadListCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public override int Execute()
7878
Reporter.WriteLine();
7979
var shouldPrintTable = versionInfo.IsInstalled;
8080
var shouldShowWorkloadSetVersion = versionInfo.GlobalJsonPath is not null ||
81-
InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(_workloadListHelper._currentSdkFeatureBand, _workloadListHelper.UserLocalPath), "default.json")).UseWorkloadSets == true;
81+
InstallStateContents.FromPath(Path.Combine(WorkloadInstallType.GetInstallStateFolder(_workloadListHelper._currentSdkFeatureBand, _workloadListHelper.UserLocalPath), "default.json")).ShouldUseWorkloadSets();
8282

8383
if (shouldShowWorkloadSetVersion)
8484
{

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ bool TryGetWorkloadSet(string workloadSetVersion, out WorkloadSet? workloadSet)
199199
_manifestsFromInstallState = installState.Manifests is null ? null : WorkloadSet.FromDictionaryForJson(installState.Manifests!, _sdkVersionBand);
200200
}
201201

202-
if (workloadSet == null && installState.UseWorkloadSets == true && availableWorkloadSets.Any())
202+
if (workloadSet == null && installState.ShouldUseWorkloadSets() && availableWorkloadSets.Any())
203203
{
204204
var maxWorkloadSetVersion = availableWorkloadSets.Keys.Aggregate((s1, s2) => VersionCompare(s1, s2) >= 0 ? s1 : s2);
205205
workloadSet = availableWorkloadSets[maxWorkloadSetVersion.ToString()];
@@ -278,7 +278,7 @@ public WorkloadVersionInfo GetWorkloadVersion()
278278
sb.Append(bytes[b].ToString("x2"));
279279
}
280280

281-
return new WorkloadVersionInfo($"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}", IsInstalled: true, WorkloadSetsEnabledWithoutWorkloadSet: installState.UseWorkloadSets == true);
281+
return new WorkloadVersionInfo($"{_sdkVersionBand.ToStringWithoutPrerelease()}-manifests.{sb}", IsInstalled: true, WorkloadSetsEnabledWithoutWorkloadSet: installState.ShouldUseWorkloadSets());
282282
}
283283
}
284284

test/Microsoft.NET.Sdk.WorkloadManifestReader.Tests/SdkDirectoryWorkloadManifestProviderTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,7 @@ public void ItUsesWorkloadManifestFromInstallState()
738738
CreateMockInstallState("8.0.200",
739739
"""
740740
{
741+
"useWorkloadSets": false,
741742
"manifests": {
742743
"ios": "11.0.1/8.0.100",
743744
}
@@ -776,9 +777,10 @@ public void ItFailsIfManifestFromInstallStateIsNotInstalled()
776777
var installStatePath = CreateMockInstallState("8.0.200",
777778
"""
778779
{
779-
"manifests": {
780+
"useWorkloadSets": false,
781+
"manifests": {
780782
"ios": "12.0.2/8.0.200",
781-
}
783+
},
782784
}
783785
""");
784786

test/dotnet-workload-install.Tests/GivenDotnetWorkloadInstall.cs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Microsoft.DotNet.Cli.NuGetPackageDownloader;
1010
using Microsoft.DotNet.Cli.Utils;
1111
using Microsoft.DotNet.Workloads.Workload;
12+
using Microsoft.DotNet.Workloads.Workload.Config;
1213
using Microsoft.DotNet.Workloads.Workload.Install;
1314
using Microsoft.DotNet.Workloads.Workload.List;
1415
using Microsoft.Extensions.EnvironmentAbstractions;
@@ -67,7 +68,7 @@ public void GivenWorkloadInstallItCanInstallPacks(bool userLocal, string sdkVers
6768
{
6869
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") };
6970
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "--skip-manifest-update" });
70-
(_, var installManager, var installer, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion);
71+
(_, var installManager, var installer, _, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion);
7172

7273
installManager.Execute()
7374
.Should().Be(0);
@@ -88,7 +89,7 @@ public void GivenWorkloadInstallItCanRollBackPackInstallation(bool userLocal, st
8889
{
8990
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android"), new WorkloadId("xamarin-android-build") };
9091
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "xamarin-android-build", "--skip-manifest-update" });
91-
(_, var installManager, var installer, var workloadResolver, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, failingWorkload: "xamarin-android-build", installedFeatureBand: sdkVersion);
92+
(_, var installManager, var installer, var workloadResolver, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, failingWorkload: "xamarin-android-build", installedFeatureBand: sdkVersion);
9293

9394
var exceptionThrown = Assert.Throws<GracefulException>(() => installManager.Execute());
9495
exceptionThrown.Message.Should().Contain("Failing workload: xamarin-android-build");
@@ -128,8 +129,9 @@ public void GivenWorkloadInstallOnFailingRollbackItDisplaysTopLevelError()
128129
public void GivenWorkloadInstallItCanUpdateAdvertisingManifests(bool userLocal, string sdkVersion)
129130
{
130131
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android" });
131-
(_, var installManager, var installer, _, var manifestUpdater, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion);
132+
(_, var installManager, var installer, _, var manifestUpdater, _, var resolverFactory) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion);
132133

134+
new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), workloadResolverFactory: resolverFactory).Execute().Should().Be(0);
133135
installManager.Execute()
134136
.Should().Be(0);
135137

@@ -216,9 +218,10 @@ public void GivenWorkloadInstallItCanUpdateInstalledManifests(bool userLocal, st
216218
{
217219
new(new ManifestVersionUpdate(new ManifestId("mock-manifest"), new ManifestVersion("2.0.0"), featureBand.ToString()), null),
218220
};
219-
(_, var installManager, var installer, _, _, _) =
221+
(_, var installManager, var installer, _, _, _, var resolverFactory) =
220222
GetTestInstallers(parseResult, userLocal, sdkVersion, manifestUpdates: manifestsToUpdate, installedFeatureBand: sdkVersion);
221223

224+
new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), workloadResolverFactory: resolverFactory).Execute().Should().Be(0);
222225
installManager.Execute()
223226
.Should().Be(0);
224227

@@ -247,9 +250,10 @@ public void GivenWorkloadInstallFromCacheItInstallsCachedManifest(bool userLocal
247250
{
248251
"dotnet", "workload", "install", "xamarin-android", "--from-cache", cachePath
249252
});
250-
(_, var installManager, var installer, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion,
253+
(_, var installManager, var installer, _, _, _, var resolverFactory) = GetTestInstallers(parseResult, userLocal, sdkVersion,
251254
tempDirManifestPath: _manifestPath, manifestUpdates: manifestsToUpdate, installedFeatureBand: sdkVersion);
252255

256+
new WorkloadConfigCommand(Parser.Instance.Parse(["dotnet", "workload", "config", "--update-mode", "manifests"]), workloadResolverFactory: resolverFactory).Execute().Should().Be(0);
253257
installManager.Execute();
254258

255259
installer.InstalledManifests[0].manifestUpdate.ManifestId.Should().Be(manifestsToUpdate[0].ManifestUpdate.ManifestId);
@@ -267,7 +271,7 @@ public void GivenWorkloadInstallItCanDownloadToOfflineCache(bool userLocal, stri
267271
{
268272
var cachePath = Path.Combine(_testAssetsManager.CreateTestDirectory(identifier: AppendForUserLocal("mockCache_", userLocal) + sdkVersion).Path, "mockCachePath");
269273
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "--download-to-cache", cachePath });
270-
(_, var installManager, _, _, var manifestUpdater, var packageDownloader) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, installedFeatureBand: sdkVersion);
274+
(_, var installManager, _, _, var manifestUpdater, var packageDownloader, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, installedFeatureBand: sdkVersion);
271275

272276
installManager.Execute();
273277

@@ -291,7 +295,7 @@ public void GivenWorkloadInstallItCanInstallFromOfflineCache(bool userLocal, str
291295
var mockWorkloadIds = new WorkloadId[] { new WorkloadId("xamarin-android") };
292296
var cachePath = "mockCachePath";
293297
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "--from-cache", cachePath });
294-
(_, var installManager, var installer, _, _, var nugetDownloader) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion);
298+
(_, var installManager, var installer, _, _, var nugetDownloader, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, installedFeatureBand: sdkVersion);
295299

296300
installManager.Execute();
297301

@@ -311,7 +315,7 @@ public void GivenWorkloadInstallItCanInstallFromOfflineCache(bool userLocal, str
311315
public void GivenWorkloadInstallItPrintsDownloadUrls(bool userLocal, string sdkVersion)
312316
{
313317
var parseResult = Parser.Instance.Parse(new string[] { "dotnet", "workload", "install", "xamarin-android", "--print-download-link-only" });
314-
(_, var installManager, _, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, installedFeatureBand: sdkVersion);
318+
(_, var installManager, _, _, _, _, _) = GetTestInstallers(parseResult, userLocal, sdkVersion, tempDirManifestPath: _manifestPath, installedFeatureBand: sdkVersion);
315319

316320
installManager.Execute();
317321

@@ -455,7 +459,7 @@ static void CreateFile(string path)
455459
.Should().BeEquivalentTo(new string[] { prev7FormattedFeatureVersion, rc1FormattedFeatureVersion });
456460
}
457461

458-
private (string, WorkloadInstallCommand, MockPackWorkloadInstaller, IWorkloadResolver, MockWorkloadManifestUpdater, MockNuGetPackageDownloader) GetTestInstallers(
462+
private (string, WorkloadInstallCommand, MockPackWorkloadInstaller, IWorkloadResolver, MockWorkloadManifestUpdater, MockNuGetPackageDownloader, IWorkloadResolverFactory) GetTestInstallers(
459463
ParseResult parseResult,
460464
bool userLocal,
461465
string sdkVersion,
@@ -491,7 +495,7 @@ static void CreateFile(string path)
491495
nugetPackageDownloader: nugetDownloader,
492496
workloadManifestUpdater: manifestUpdater);
493497

494-
return (testDirectory, installManager, installer, workloadResolver, manifestUpdater, nugetDownloader);
498+
return (testDirectory, installManager, installer, workloadResolver, manifestUpdater, nugetDownloader, workloadResolverFactory);
495499
}
496500

497501
[Fact]
@@ -627,7 +631,7 @@ public void ShowManifestUpdatesWhenVerbosityIsDetailedOrDiagnostic(string verbos
627631
{
628632
new(new ManifestVersionUpdate(new ManifestId("mock-manifest"), new ManifestVersion("2.0.0"), sdkFeatureBand), null),
629633
};
630-
(_, var installManager, _, _, _, _) =
634+
(_, var installManager, _, _, _, _, _) =
631635
GetTestInstallers(parseResult, true, sdkFeatureBand, manifestUpdates: manifestsToUpdate);
632636

633637
installManager.Execute().Should().Be(0);

0 commit comments

Comments
 (0)