| File: Commands\Package\Update\PackageUpdateCommand.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\NuGet.CommandLine.XPlat\NuGet.CommandLine.XPlat.csproj (NuGet.CommandLine.XPlat) |
// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nullable enable using System; using System.Collections.Generic; using System.CommandLine; using System.IO; using System.Threading; using System.Threading.Tasks; using NuGet.Common; namespace NuGet.CommandLine.XPlat.Commands.Package.Update; internal static class PackageUpdateCommand { internal static void Register(Command packageCommand, Option<bool> interactiveOption, IVirtualProjectBuilder? virtualProjectBuilder = null) { Register(packageCommand, interactiveOption, (args, ct) => PackageUpdateCommandRunner.Run(args, virtualProjectBuilder, ct)); } internal static void Register(Command packageCommand, Option<bool> interactiveOption, Func<PackageUpdateArgs, CancellationToken, Task<int>> action) { var command = new DocumentedCommand("update", Strings.PackageUpdateCommand_Description, "https://aka.ms/dotnet/package/update"); var packagesArguments = new Argument<IReadOnlyList<PackageWithVersionRange>>("packages") { Description = Strings.PackageUpdate_PackageArgumentDescription, Arity = ArgumentArity.ZeroOrMore, CustomParser = PackageWithVersionRange.Parse }; command.Arguments.Add(packagesArguments); var projectOption = new Option<FileSystemInfo>("--project", "--file").AcceptExistingOnly(); projectOption.Description = Strings.PackageUpdateCommand_ProjectOptionDescription; command.Options.Add(projectOption); var vulnerableOption = new Option<bool>("--vulnerable"); vulnerableOption.Description = Strings.PackageUpdateCommand_VulnerableOptionDescription; command.Options.Add(vulnerableOption); command.Options.Add(interactiveOption); var verbosityOption = CommonOptions.GetVerbosityOption(); command.Options.Add(verbosityOption); packageCommand.Subcommands.Add(command); command.SetAction(async (args, cancellationToken) => { FileSystemInfo? project = args.GetValue(projectOption); IReadOnlyList<PackageWithVersionRange> packages = args.GetValue(packagesArguments) ?? []; bool interactive = args.GetValue(interactiveOption); VerbosityEnum verbosity = args.GetValue(verbosityOption) ?? VerbosityEnum.normal; LogLevel logLevel = verbosity.ToLogLevel(); bool vulnerable = args.GetValue(vulnerableOption); var commandArgs = new PackageUpdateArgs { Project = project?.FullName ?? Environment.CurrentDirectory, Packages = packages, Interactive = interactive, LogLevel = logLevel, Vulnerable = vulnerable, }; return await action(commandArgs, cancellationToken); }); } }