File: Commands\Workload\History\WorkloadHistoryCommand.cs
Web Access
Project: ..\..\..\src\Cli\dotnet\dotnet.csproj (dotnet)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#nullable disable
 
using System.CommandLine;
using Microsoft.DotNet.Cli.NuGetPackageDownloader;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.NET.Sdk.WorkloadManifestReader;
using Microsoft.Deployment.DotNet.Releases;
using Microsoft.DotNet.Cli.Commands.Workload.Install;
 
namespace Microsoft.DotNet.Cli.Commands.Workload.History;
 
internal class WorkloadHistoryCommand : WorkloadCommandBase
{
    private readonly IInstaller _workloadInstaller;
    private readonly IWorkloadResolver _workloadResolver;
    private readonly ReleaseVersion _sdkVersion;
    private readonly SdkFeatureBand _sdkFeatureBand;
 
    public WorkloadHistoryCommand(
        ParseResult parseResult,
        IReporter reporter = null,
        IInstaller workloadInstaller = null,
        INuGetPackageDownloader nugetPackageDownloader = null
    ) : base(parseResult, CommonOptions.HiddenVerbosityOption, reporter, null, nugetPackageDownloader)
    {
        var creationResult = new WorkloadResolverFactory().Create();
 
        var userProfileDir = creationResult.UserProfileDir;
        _sdkVersion = creationResult.SdkVersion;
        _workloadResolver = creationResult.WorkloadResolver;
        _sdkFeatureBand = new SdkFeatureBand(_sdkVersion);
 
        _workloadInstaller = workloadInstaller ??
                             WorkloadInstallerFactory.GetWorkloadInstaller(Reporter, _sdkFeatureBand,
                                 _workloadResolver, Verbosity, userProfileDir, VerifySignatures, PackageDownloader, creationResult.DotnetPath, TempDirectoryPath,
                                 packageSourceLocation: null, _parseResult.ToRestoreActionConfig());
    }
 
    public override int Execute()
    {
        var displayRecords = WorkloadHistoryDisplay.ProcessWorkloadHistoryRecords(_workloadInstaller.GetWorkloadHistoryRecords(_sdkFeatureBand.ToString()), out bool unknownRecordsPresent);
 
        if (displayRecords.Count == 0)
        {
            Reporter.WriteLine(CliCommandStrings.NoHistoryFound);
        }
        else
        {
            var table = new PrintableTable<WorkloadHistoryDisplay.DisplayRecord>();
            table.AddColumn(CliCommandStrings.Id, r => r.ID?.ToString() ?? "");
            table.AddColumn(CliCommandStrings.Date, r => r.TimeStarted?.ToString() ?? "");
            table.AddColumn(CliCommandStrings.Command, r => r.Command);
            table.AddColumn(CliCommandStrings.Workloads, r => string.Join(", ", r.HistoryState.InstalledWorkloads ?? []));
            table.AddColumn(CliCommandStrings.GlobalJsonVersion, r => r.GlobalJsonVersion ?? string.Empty);
            table.AddColumn(CliCommandStrings.WorkloadHistoryWorkloadSetVersion, r => r.HistoryState.WorkloadSetVersion ?? string.Empty);
 
            Reporter.WriteLine();
            table.PrintRows(displayRecords, l => Reporter.WriteLine(l));
            Reporter.WriteLine();
 
            if (unknownRecordsPresent)
            {
                Reporter.WriteLine(CliCommandStrings.UnknownRecordsInformationalMessage);
                Reporter.WriteLine();
            }
        }
 
        return 0;
    }
 
}