-
Notifications
You must be signed in to change notification settings - Fork 753
Expand file tree
/
Copy pathPackageUpdateCommand.cs
More file actions
72 lines (59 loc) · 2.88 KB
/
PackageUpdateCommand.cs
File metadata and controls
72 lines (59 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// 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.CommandLine.XPlat.Utility;
using NuGet.Common;
using NuGet.Versioning;
namespace NuGet.CommandLine.XPlat.Commands.Package.Update;
internal static class PackageUpdateCommand
{
internal static void Register(Command packageCommand, Option<bool> interactiveOption)
{
Register(packageCommand, interactiveOption, PackageUpdateCommandRunner.Run);
}
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<PackageArgument<VersionRange>>>("packages")
{
Description = Strings.PackageUpdate_PackageArgumentDescription,
Arity = ArgumentArity.ZeroOrMore,
CustomParser = PackageArgumentParserUtility.ParseWithVersionRange
};
command.Arguments.Add(packagesArguments);
var projectOption = new Option<FileSystemInfo>("--project").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<PackageArgument<VersionRange>> 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);
});
}
}