File: Commands\Tool\Update\ToolUpdateGlobalOrToolPathCommand.cs
Web Access
Project: src\src\sdk\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.Commands.Tool.Install;
using Microsoft.DotNet.Cli.ShellShim;
using Microsoft.DotNet.Cli.ToolPackage;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.Extensions.EnvironmentAbstractions;
using CreateShellShimRepository = Microsoft.DotNet.Cli.Commands.Tool.Install.CreateShellShimRepository;

namespace Microsoft.DotNet.Cli.Commands.Tool.Update;

internal delegate (IToolPackageStore, IToolPackageStoreQuery, IToolPackageDownloader, IToolPackageUninstaller) CreateToolPackageStoresAndDownloaderAndUninstaller(
    DirectoryPath? nonGlobalLocation = null,
    IEnumerable<string> additionalRestoreArguments = null,
    string currentWorkingDirectory = null);

internal sealed class ToolUpdateGlobalOrToolPathCommand : CommandBase<ToolUpdateCommandDefinition>  
{
    private readonly CreateShellShimRepository _createShellShimRepository;
    private readonly CreateToolPackageStoresAndDownloaderAndUninstaller _createToolPackageStoreDownloaderUninstaller;
    internal readonly ToolInstallGlobalOrToolPathCommand _toolInstallGlobalOrToolPathCommand;

    public ToolUpdateGlobalOrToolPathCommand(ParseResult parseResult,
        CreateToolPackageStoresAndDownloaderAndUninstaller createToolPackageStoreDownloaderUninstaller = null,
        CreateShellShimRepository createShellShimRepository = null,
        IReporter reporter = null,
        IToolPackageStoreQuery _store = null)
        : base(parseResult)
    {
        _createToolPackageStoreDownloaderUninstaller = createToolPackageStoreDownloaderUninstaller ??
            ToolPackageFactory.CreateToolPackageStoresAndDownloaderAndUninstaller;

        _createShellShimRepository = createShellShimRepository ??
            ShellShimRepositoryFactory.CreateShellShimRepository;

        _toolInstallGlobalOrToolPathCommand = new ToolInstallGlobalOrToolPathCommand(
            parseResult,
            _createToolPackageStoreDownloaderUninstaller,
            _createShellShimRepository,
            reporter: reporter,
            store: _store);
    }

    public override int Execute()
    {
        _toolInstallGlobalOrToolPathCommand.Execute();
        return 0;
    }
}