diff --git a/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommand.cs b/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommand.cs index 15049f909b09..fde417edde07 100644 --- a/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommand.cs +++ b/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommand.cs @@ -65,7 +65,7 @@ public WorkloadInstallCommand( _shouldShutdownInstaller = _workloadInstallerFromConstructor != null; _workloadManifestUpdater = _workloadManifestUpdaterFromConstructor ?? new WorkloadManifestUpdater(resolvedReporter, _workloadResolver, PackageDownloader, _userProfileDir, - _workloadInstaller.GetWorkloadInstallationRecordRepository(), _workloadInstaller, _packageSourceLocation, displayManifestUpdates: Verbosity.IsDetailedOrDiagnostic()); + _workloadInstaller.GetWorkloadInstallationRecordRepository(), _workloadInstaller, _packageSourceLocation, displayManifestUpdates: Verbosity.IsDiagnostic()); } private IReadOnlyCollection GetValidWorkloadIds() diff --git a/src/Cli/dotnet/Commands/Workload/Install/WorkloadManifestUpdater.cs b/src/Cli/dotnet/Commands/Workload/Install/WorkloadManifestUpdater.cs index 8ed500786ec7..b74f202cf43c 100644 --- a/src/Cli/dotnet/Commands/Workload/Install/WorkloadManifestUpdater.cs +++ b/src/Cli/dotnet/Commands/Workload/Install/WorkloadManifestUpdater.cs @@ -366,7 +366,10 @@ private async Task UpdateManifestWithVersionAsync(string id, bool includeP } catch (Exception e) { - _reporter.WriteLine(CliCommandStrings.FailedAdManifestUpdate, manifestId, e.Message); + if (_displayManifestUpdates) + { + _reporter.WriteLine(CliCommandStrings.FailedAdManifestUpdate, manifestId, e.Message); + } return false; } finally @@ -405,7 +408,10 @@ private async Task UpdateAdvertisingManifestAsync(WorkloadManifestInfo manifest, } } - _reporter.WriteLine(CliCommandStrings.AdManifestPackageDoesNotExist, manifest.Id); + if (_displayManifestUpdates) + { + _reporter.WriteLine(CliCommandStrings.AdManifestPackageDoesNotExist, manifest.Id); + } } private (ManifestVersionWithBand ManifestWithBand, WorkloadCollection Workloads)? GetAdvertisingManifestVersionAndWorkloads(ManifestId manifestId) diff --git a/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommand.cs b/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommand.cs index 8af228d4f2c6..6f571f6730fd 100644 --- a/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommand.cs +++ b/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommand.cs @@ -56,7 +56,7 @@ public WorkloadListCommand( string userProfileDir1 = userProfileDir ?? CliFolderPathCalculator.DotnetUserProfileFolderPath; _workloadManifestUpdater = workloadManifestUpdater ?? new WorkloadManifestUpdater(resolvedReporter, - _workloadListHelper.WorkloadResolver, PackageDownloader, userProfileDir1, _workloadListHelper.WorkloadRecordRepo, _workloadListHelper.Installer); + _workloadListHelper.WorkloadResolver, PackageDownloader, userProfileDir1, _workloadListHelper.WorkloadRecordRepo, _workloadListHelper.Installer, displayManifestUpdates: Verbosity.IsDiagnostic()); } public override int Execute() diff --git a/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommand.cs b/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommand.cs index a8d35305f974..c88759075fb6 100644 --- a/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommand.cs +++ b/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommand.cs @@ -6,6 +6,7 @@ using System.CommandLine; using System.Text.Json; using Microsoft.DotNet.Cli.Commands.Workload.Install; +using Microsoft.DotNet.Cli.Extensions; using Microsoft.DotNet.Cli.NuGetPackageDownloader; using Microsoft.DotNet.Cli.ToolPackage; using Microsoft.DotNet.Cli.Utils; @@ -54,7 +55,7 @@ public WorkloadUpdateCommand( _workloadManifestUpdater = _workloadManifestUpdaterFromConstructor ?? new WorkloadManifestUpdater(resolvedReporter, _workloadResolver, PackageDownloader, _userProfileDir, - _workloadInstaller.GetWorkloadInstallationRecordRepository(), _workloadInstaller, _packageSourceLocation, sdkFeatureBand: _sdkFeatureBand); + _workloadInstaller.GetWorkloadInstallationRecordRepository(), _workloadInstaller, _packageSourceLocation, displayManifestUpdates: Verbosity.IsDiagnostic(), sdkFeatureBand: _sdkFeatureBand); _recorder = recorder; if (_recorder is null) { diff --git a/src/Cli/dotnet/Extensions/CommonOptionsExtensions.cs b/src/Cli/dotnet/Extensions/CommonOptionsExtensions.cs index 9254bbd73b77..1ffe3eee89ee 100644 --- a/src/Cli/dotnet/Extensions/CommonOptionsExtensions.cs +++ b/src/Cli/dotnet/Extensions/CommonOptionsExtensions.cs @@ -48,6 +48,12 @@ public static bool IsDetailedOrDiagnostic(this VerbosityOptions verbosity) verbosity.Equals(VerbosityOptions.detailed); } + public static bool IsDiagnostic(this VerbosityOptions verbosity) + { + return verbosity.Equals(VerbosityOptions.diag) || + verbosity.Equals(VerbosityOptions.diagnostic); + } + public static bool IsQuiet(this VerbosityOptions verbosity) { return verbosity.Equals(VerbosityOptions.q) || diff --git a/test/dotnet.Tests/CommandTests/Workload/Install/GivenDotnetWorkloadInstall.cs b/test/dotnet.Tests/CommandTests/Workload/Install/GivenDotnetWorkloadInstall.cs index 316337d5712a..8863f3479602 100644 --- a/test/dotnet.Tests/CommandTests/Workload/Install/GivenDotnetWorkloadInstall.cs +++ b/test/dotnet.Tests/CommandTests/Workload/Install/GivenDotnetWorkloadInstall.cs @@ -603,6 +603,7 @@ public void HideManifestUpdateCheckWhenVerbosityIsQuiet() [Theory(Skip = "https://github.com/dotnet/sdk/issues/25175")] [InlineData("--verbosity:minimal")] [InlineData("--verbosity:normal")] + [InlineData("--verbosity:detailed")] public void HideManifestUpdatesWhenVerbosityIsMinimalOrNormal(string verbosityFlag) { var command = new DotnetCommand(Log); @@ -617,9 +618,8 @@ public void HideManifestUpdatesWhenVerbosityIsMinimalOrNormal(string verbosityFl } [Theory(Skip = "https://github.com/dotnet/sdk/issues/25175")] - [InlineData("--verbosity:detailed")] [InlineData("--verbosity:diagnostic")] - public void ShowManifestUpdatesWhenVerbosityIsDetailedOrDiagnostic(string verbosityFlag) + public void ShowManifestUpdatesWhenVerbosityIsDiagnostic(string verbosityFlag) { string sdkFeatureBand = "6.0.300"; diff --git a/test/dotnet.Tests/CommandTests/Workload/Install/GivenWorkloadManifestUpdater.cs b/test/dotnet.Tests/CommandTests/Workload/Install/GivenWorkloadManifestUpdater.cs index 4b63850cec2c..8f7e6ffeed3e 100644 --- a/test/dotnet.Tests/CommandTests/Workload/Install/GivenWorkloadManifestUpdater.cs +++ b/test/dotnet.Tests/CommandTests/Workload/Install/GivenWorkloadManifestUpdater.cs @@ -318,7 +318,7 @@ public async Task ItCanFallbackWithNoUpdates(bool useOfflineCache) var workloadResolver = WorkloadResolver.CreateForTests(workloadManifestProvider, dotnetRoot); var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot); var installationRepo = new MockInstallationRecordRepository(); - var manifestUpdater = new WorkloadManifestUpdater(_reporter, workloadResolver, nugetDownloader, Path.Combine(testDir, ".dotnet"), installationRepo, new MockPackWorkloadInstaller(dotnetRoot)); + var manifestUpdater = new WorkloadManifestUpdater(_reporter, workloadResolver, nugetDownloader, Path.Combine(testDir, ".dotnet"), installationRepo, new MockPackWorkloadInstaller(dotnetRoot), displayManifestUpdates: true); var offlineCacheDir = ""; if (useOfflineCache) @@ -349,6 +349,48 @@ public async Task ItCanFallbackWithNoUpdates(bool useOfflineCache) _reporter.Lines.Should().Contain(string.Format(CliCommandStrings.AdManifestPackageDoesNotExist, testManifestName)); } + [Fact] + public async Task ItSuppressesMessagesWhenDisplayManifestUpdatesIsFalse() + { + // Test that advertising manifest messages are suppressed when displayManifestUpdates is false + + // Arrange + string sdkFeatureBand = "6.0.300"; + var testDir = _testAssetsManager.CreateTestDirectory().Path; + var dotnetRoot = Path.Combine(testDir, "dotnet"); + + var emptyInstalledManifestsDir = Path.Combine(dotnetRoot, "sdk-manifests", "6.0.200"); + Directory.CreateDirectory(emptyInstalledManifestsDir); + + var adManifestDir = Path.Combine(testDir, ".dotnet", "sdk-advertising", sdkFeatureBand); + Directory.CreateDirectory(adManifestDir); + + string testManifestName = "test-manifest"; + Directory.CreateDirectory(Path.Combine(emptyInstalledManifestsDir, testManifestName)); + File.WriteAllText(Path.Combine(emptyInstalledManifestsDir, testManifestName, _manifestFileName), GetManifestContent(new ManifestVersion("1.0.0"))); + + var workloadManifestProvider = new MockManifestProvider((testManifestName, Path.Combine(emptyInstalledManifestsDir, testManifestName, _manifestFileName), "1.0.0", "6.0.200")) + { + SdkFeatureBand = new SdkFeatureBand(sdkFeatureBand) + }; + + var workloadResolver = WorkloadResolver.CreateForTests(workloadManifestProvider, dotnetRoot); + var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot); + var installationRepo = new MockInstallationRecordRepository(); + // Create updater with displayManifestUpdates: false (simulating non-diagnostic verbosity) + var manifestUpdater = new WorkloadManifestUpdater(_reporter, workloadResolver, nugetDownloader, Path.Combine(testDir, ".dotnet"), installationRepo, new MockPackWorkloadInstaller(dotnetRoot), displayManifestUpdates: false); + + nugetDownloader.PackageIdsToNotFind.Add($"{testManifestName}.Manifest-6.0.300"); + nugetDownloader.PackageIdsToNotFind.Add($"{testManifestName}.Manifest-6.0.200"); + + // Act + await manifestUpdater.UpdateAdvertisingManifestsAsync(includePreviews: true); + + // Assert - messages should be suppressed + _reporter.Lines.Should().NotContain(l => l.ToLowerInvariant().Contains("fail")); + _reporter.Lines.Should().NotContain(string.Format(CliCommandStrings.AdManifestPackageDoesNotExist, testManifestName)); + } + [Theory] [InlineData(false)] [InlineData(true)] @@ -384,7 +426,7 @@ public async Task GivenNoUpdatesAreAvailableAndNoRollbackItGivesAppropriateMessa var workloadResolver = WorkloadResolver.CreateForTests(workloadManifestProvider, dotnetRoot); var nugetDownloader = new MockNuGetPackageDownloader(dotnetRoot); var installationRepo = new MockInstallationRecordRepository(); - var manifestUpdater = new WorkloadManifestUpdater(_reporter, workloadResolver, nugetDownloader, Path.Combine(testDir, ".dotnet"), installationRepo, new MockPackWorkloadInstaller(dotnetRoot)); + var manifestUpdater = new WorkloadManifestUpdater(_reporter, workloadResolver, nugetDownloader, Path.Combine(testDir, ".dotnet"), installationRepo, new MockPackWorkloadInstaller(dotnetRoot), displayManifestUpdates: true); var offlineCacheDir = ""; if (useOfflineCache)