From 839c76268cb76304ac79a19b3ae117b11b5acc23 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Dec 2025 22:20:29 +0000 Subject: [PATCH] Refactor Tool and Workload command subcommands - separate parsing and action logic Co-authored-by: tmat <41759+tmat@users.noreply.github.com> --- .../Execute/ToolExecuteCommandDefinition.cs | 53 ++++++++ .../Tool/Execute/ToolExecuteCommandParser.cs | 49 ++------ .../Install/ToolInstallCommandDefinition.cs | 118 ++++++++++++++++++ .../Tool/Install/ToolInstallCommandParser.cs | 98 +++------------ .../Tool/List/ToolListCommandDefinition.cs | 46 +++++++ .../Tool/List/ToolListCommandParser.cs | 28 +---- .../Restore/ToolRestoreCommandDefinition.cs | 39 ++++++ .../Tool/Restore/ToolRestoreCommandParser.cs | 20 +-- .../Tool/Run/ToolRunCommandDefinition.cs | 39 ++++++ .../Commands/Tool/Run/ToolRunCommandParser.cs | 23 +--- .../Search/ToolSearchCommandDefinition.cs | 55 ++++++++ .../Tool/Search/ToolSearchCommandParser.cs | 39 +----- .../ToolUninstallCommandDefinition.cs | 43 +++++++ .../Uninstall/ToolUninstallCommandParser.cs | 23 +--- .../Update/ToolUpdateCommandDefinition.cs | 30 +++++ .../Tool/Update/ToolUpdateCommandParser.cs | 14 +-- .../Clean/WorkloadCleanCommandDefinition.cs | 22 ++++ .../Clean/WorkloadCleanCommandParser.cs | 6 +- .../Config/WorkloadConfigCommandDefinition.cs | 32 +++++ .../Config/WorkloadConfigCommandParser.cs | 15 +-- .../WorkloadElevateCommandDefinition.cs | 21 ++++ .../Elevate/WorkloadElevateCommandParser.cs | 5 +- .../WorkloadHistoryCommandDefinition.cs | 18 +++ .../History/WorkloadHistoryCommandParser.cs | 2 +- .../WorkloadInstallCommandDefinition.cs | 58 +++++++++ .../Install/WorkloadInstallCommandParser.cs | 42 ++----- .../List/WorkloadListCommandDefinition.cs | 40 ++++++ .../List/WorkloadListCommandParser.cs | 22 +--- .../Repair/WorkloadRepairCommandDefinition.cs | 32 +++++ .../Repair/WorkloadRepairCommandParser.cs | 17 +-- .../WorkloadRestoreCommandDefinition.cs | 29 +++++ .../Restore/WorkloadRestoreCommandParser.cs | 11 +- .../Search/WorkloadSearchCommandDefinition.cs | 31 +++++ .../Search/WorkloadSearchCommandParser.cs | 15 +-- ...WorkloadSearchVersionsCommandDefinition.cs | 63 ++++++++++ .../WorkloadSearchVersionsCommandParser.cs | 47 +------ .../WorkloadUninstallCommandDefinition.cs | 24 ++++ .../WorkloadUninstallCommandParser.cs | 11 +- .../Update/WorkloadUpdateCommandDefinition.cs | 61 +++++++++ .../Update/WorkloadUpdateCommandParser.cs | 46 ++----- 40 files changed, 964 insertions(+), 423 deletions(-) create mode 100644 src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Tool/Install/ToolInstallCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Tool/List/ToolListCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Tool/Run/ToolRunCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Tool/Search/ToolSearchCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Tool/Uninstall/ToolUninstallCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Tool/Update/ToolUpdateCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Clean/WorkloadCleanCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Config/WorkloadConfigCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Elevate/WorkloadElevateCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/History/WorkloadHistoryCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/List/WorkloadListCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Repair/WorkloadRepairCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchVersionsCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Uninstall/WorkloadUninstallCommandDefinition.cs create mode 100644 src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommandDefinition.cs diff --git a/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommandDefinition.cs b/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommandDefinition.cs new file mode 100644 index 000000000000..87eeeb51668e --- /dev/null +++ b/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommandDefinition.cs @@ -0,0 +1,53 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.CommandLine; +using Microsoft.DotNet.Cli.Commands.Tool.Install; + +namespace Microsoft.DotNet.Cli.Commands.Tool.Execute; + +internal static class ToolExecuteCommandDefinition +{ + public static readonly Argument PackageIdentityArgument = ToolInstallCommandParser.PackageIdentityArgument; + + public static readonly Argument> CommandArgument = new("commandArguments") + { + Description = CliCommandStrings.ToolRunArgumentsDescription + }; + + public static readonly Option VersionOption = ToolInstallCommandParser.VersionOption; + public static readonly Option RollForwardOption = ToolInstallCommandParser.RollForwardOption; + public static readonly Option PrereleaseOption = ToolInstallCommandParser.PrereleaseOption; + public static readonly Option ConfigOption = ToolInstallCommandParser.ConfigOption; + public static readonly Option SourceOption = ToolInstallCommandParser.SourceOption; + public static readonly Option AddSourceOption = ToolInstallCommandParser.AddSourceOption; + public static readonly Option InteractiveOption = CommonOptions.InteractiveOption(); + public static readonly Option YesOption = CommonOptions.YesOption; + public static readonly Option VerbosityOption = ToolInstallCommandParser.VerbosityOption; + + public static Command Create() + { + Command command = new("execute", CliCommandStrings.ToolExecuteCommandDescription); + + command.Aliases.Add("exec"); + + command.Arguments.Add(PackageIdentityArgument); + command.Arguments.Add(CommandArgument); + + command.Options.Add(VersionOption); + command.Options.Add(YesOption); + command.Options.Add(InteractiveOption); + command.Options.Add(RollForwardOption); + command.Options.Add(PrereleaseOption); + command.Options.Add(ConfigOption); + command.Options.Add(SourceOption); + command.Options.Add(AddSourceOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.DisableParallelOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.NoCacheOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.NoHttpCacheOption); + command.Options.Add(VerbosityOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommandParser.cs b/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommandParser.cs index 8bc5479916c5..8571801cf2cb 100644 --- a/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommandParser.cs +++ b/src/Cli/dotnet/Commands/Tool/Execute/ToolExecuteCommandParser.cs @@ -7,27 +7,23 @@ namespace Microsoft.DotNet.Cli.Commands.Tool.Execute; internal static class ToolExecuteCommandParser - { - public static readonly Argument PackageIdentityArgument = ToolInstallCommandParser.PackageIdentityArgument; - - public static readonly Argument> CommandArgument = new("commandArguments") - { - Description = CliCommandStrings.ToolRunArgumentsDescription - }; + public static readonly Argument PackageIdentityArgument = ToolExecuteCommandDefinition.PackageIdentityArgument; - public static readonly Option VersionOption = ToolInstallCommandParser.VersionOption; - public static readonly Option RollForwardOption = ToolInstallCommandParser.RollForwardOption; - public static readonly Option PrereleaseOption = ToolInstallCommandParser.PrereleaseOption; - public static readonly Option ConfigOption = ToolInstallCommandParser.ConfigOption; - public static readonly Option SourceOption = ToolInstallCommandParser.SourceOption; - public static readonly Option AddSourceOption = ToolInstallCommandParser.AddSourceOption; - public static readonly Option InteractiveOption = CommonOptions.InteractiveOption(); - public static readonly Option YesOption = CommonOptions.YesOption; - public static readonly Option VerbosityOption = ToolInstallCommandParser.VerbosityOption; + public static readonly Argument> CommandArgument = ToolExecuteCommandDefinition.CommandArgument; + public static readonly Option VersionOption = ToolExecuteCommandDefinition.VersionOption; + public static readonly Option RollForwardOption = ToolExecuteCommandDefinition.RollForwardOption; + public static readonly Option PrereleaseOption = ToolExecuteCommandDefinition.PrereleaseOption; + public static readonly Option ConfigOption = ToolExecuteCommandDefinition.ConfigOption; + public static readonly Option SourceOption = ToolExecuteCommandDefinition.SourceOption; + public static readonly Option AddSourceOption = ToolExecuteCommandDefinition.AddSourceOption; + public static readonly Option InteractiveOption = ToolExecuteCommandDefinition.InteractiveOption; + public static readonly Option YesOption = ToolExecuteCommandDefinition.YesOption; + public static readonly Option VerbosityOption = ToolExecuteCommandDefinition.VerbosityOption; public static readonly Command Command = ConstructCommand(); + public static Command GetCommand() { return Command; @@ -35,26 +31,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("execute", CliCommandStrings.ToolExecuteCommandDescription); - - command.Aliases.Add("exec"); - - command.Arguments.Add(PackageIdentityArgument); - command.Arguments.Add(CommandArgument); - - command.Options.Add(VersionOption); - command.Options.Add(YesOption); - command.Options.Add(InteractiveOption); - command.Options.Add(RollForwardOption); - command.Options.Add(PrereleaseOption); - command.Options.Add(ConfigOption); - command.Options.Add(SourceOption); - command.Options.Add(AddSourceOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.DisableParallelOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.NoCacheOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.NoHttpCacheOption); - command.Options.Add(VerbosityOption); + Command command = ToolExecuteCommandDefinition.Create(); command.SetAction((parseResult) => new ToolExecuteCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Tool/Install/ToolInstallCommandDefinition.cs b/src/Cli/dotnet/Commands/Tool/Install/ToolInstallCommandDefinition.cs new file mode 100644 index 000000000000..bfca65c592b5 --- /dev/null +++ b/src/Cli/dotnet/Commands/Tool/Install/ToolInstallCommandDefinition.cs @@ -0,0 +1,118 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.CommandLine; +using Microsoft.DotNet.Cli.Commands.Tool.Common; +using Microsoft.DotNet.Cli.Commands.Tool.Search; +using Microsoft.DotNet.Cli.CommandLine; + +namespace Microsoft.DotNet.Cli.Commands.Tool.Install; + +internal static class ToolInstallCommandDefinition +{ + public static readonly Argument PackageIdentityArgument = CommonArguments.RequiredPackageIdentityArgument("dotnetsay", "2.1.7"); + + public static readonly Option VersionOption = new("--version") + { + Description = CliCommandStrings.ToolInstallVersionOptionDescription, + HelpName = CliCommandStrings.ToolInstallVersionOptionName + }; + + public static readonly Option ConfigOption = new("--configfile") + { + Description = CliCommandStrings.ToolInstallConfigFileOptionDescription, + HelpName = CliCommandStrings.ToolInstallConfigFileOptionName + }; + + public static readonly Option SourceOption = new Option("--source") + { + Description = CliCommandStrings.ToolInstallSourceOptionDescription, + HelpName = CliCommandStrings.ToolInstallSourceOptionName + }.AllowSingleArgPerToken(); + + public static readonly Option AddSourceOption = new Option("--add-source") + { + Description = CliCommandStrings.ToolInstallAddSourceOptionDescription, + HelpName = CliCommandStrings.ToolInstallAddSourceOptionName + }.AllowSingleArgPerToken(); + + public static readonly Option FrameworkOption = new("--framework") + { + Description = CliCommandStrings.ToolInstallFrameworkOptionDescription, + HelpName = CliCommandStrings.ToolInstallFrameworkOptionName + }; + + public static readonly Option PrereleaseOption = ToolSearchCommandParser.PrereleaseOption; + + public static readonly Option CreateManifestIfNeededOption = new("--create-manifest-if-needed") + { + Description = CliCommandStrings.CreateManifestIfNeededOptionDescription, + Arity = ArgumentArity.ZeroOrOne, + DefaultValueFactory = _ => true, + }; + + public static readonly Option AllowPackageDowngradeOption = new("--allow-downgrade") + { + Description = CliCommandStrings.AllowPackageDowngradeOptionDescription, + Arity = ArgumentArity.Zero + }; + + public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + + // Don't use the common options version as we don't want this to be a forwarded option + public static readonly Option ArchitectureOption = new("--arch", "-a") + { + Description = CliStrings.ArchitectureOptionDescription + }; + + public static readonly Option RollForwardOption = new("--allow-roll-forward") + { + Description = CliCommandStrings.RollForwardOptionDescription, + Arity = ArgumentArity.Zero + }; + + public static readonly Option GlobalOption = ToolAppliedOption.GlobalOption(CliCommandStrings.ToolInstallGlobalOptionDescription); + + public static readonly Option LocalOption = ToolAppliedOption.LocalOption(CliCommandStrings.ToolInstallLocalOptionDescription); + + public static readonly Option ToolPathOption = ToolAppliedOption.ToolPathOption(CliCommandStrings.ToolInstallToolPathOptionDescription); + + public static readonly Option ToolManifestOption = ToolAppliedOption.ToolManifestOption(CliCommandStrings.ToolInstallManifestPathOptionDescription); + + public static Command Create() + { + Command command = new("install", CliCommandStrings.ToolInstallCommandDescription); + command.Arguments.Add(PackageIdentityArgument); + + AddCommandOptions(command); + + command.Options.Add(ArchitectureOption); + command.Options.Add(CreateManifestIfNeededOption); + command.Options.Add(AllowPackageDowngradeOption); + command.Options.Add(RollForwardOption); + + return command; + } + + public static Command AddCommandOptions(Command command) + { + command.Options.Add(GlobalOption); + command.Options.Add(LocalOption); + command.Options.Add(ToolPathOption); + command.Options.Add(VersionOption); + command.Options.Add(ConfigOption); + command.Options.Add(ToolManifestOption); + command.Options.Add(AddSourceOption); + command.Options.Add(SourceOption); + command.Options.Add(FrameworkOption); + command.Options.Add(PrereleaseOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.DisableParallelOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.NoCacheOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.NoHttpCacheOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption); + command.Options.Add(VerbosityOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Tool/Install/ToolInstallCommandParser.cs b/src/Cli/dotnet/Commands/Tool/Install/ToolInstallCommandParser.cs index 53e1367eee08..b4832b62c714 100644 --- a/src/Cli/dotnet/Commands/Tool/Install/ToolInstallCommandParser.cs +++ b/src/Cli/dotnet/Commands/Tool/Install/ToolInstallCommandParser.cs @@ -10,74 +10,37 @@ namespace Microsoft.DotNet.Cli.Commands.Tool.Install; internal static class ToolInstallCommandParser { - public static readonly Argument PackageIdentityArgument = CommonArguments.RequiredPackageIdentityArgument("dotnetsay", "2.1.7"); + public static readonly Argument PackageIdentityArgument = ToolInstallCommandDefinition.PackageIdentityArgument; - public static readonly Option VersionOption = new("--version") - { - Description = CliCommandStrings.ToolInstallVersionOptionDescription, - HelpName = CliCommandStrings.ToolInstallVersionOptionName - }; + public static readonly Option VersionOption = ToolInstallCommandDefinition.VersionOption; - public static readonly Option ConfigOption = new("--configfile") - { - Description = CliCommandStrings.ToolInstallConfigFileOptionDescription, - HelpName = CliCommandStrings.ToolInstallConfigFileOptionName - }; + public static readonly Option ConfigOption = ToolInstallCommandDefinition.ConfigOption; - public static readonly Option SourceOption = new Option("--source") - { - Description = CliCommandStrings.ToolInstallSourceOptionDescription, - HelpName = CliCommandStrings.ToolInstallSourceOptionName - }.AllowSingleArgPerToken(); + public static readonly Option SourceOption = ToolInstallCommandDefinition.SourceOption; - public static readonly Option AddSourceOption = new Option("--add-source") - { - Description = CliCommandStrings.ToolInstallAddSourceOptionDescription, - HelpName = CliCommandStrings.ToolInstallAddSourceOptionName - }.AllowSingleArgPerToken(); + public static readonly Option AddSourceOption = ToolInstallCommandDefinition.AddSourceOption; - public static readonly Option FrameworkOption = new("--framework") - { - Description = CliCommandStrings.ToolInstallFrameworkOptionDescription, - HelpName = CliCommandStrings.ToolInstallFrameworkOptionName - }; + public static readonly Option FrameworkOption = ToolInstallCommandDefinition.FrameworkOption; - public static readonly Option PrereleaseOption = ToolSearchCommandParser.PrereleaseOption; + public static readonly Option PrereleaseOption = ToolInstallCommandDefinition.PrereleaseOption; - public static readonly Option CreateManifestIfNeededOption = new("--create-manifest-if-needed") - { - Description = CliCommandStrings.CreateManifestIfNeededOptionDescription, - Arity = ArgumentArity.ZeroOrOne, - DefaultValueFactory = _ => true, - }; + public static readonly Option CreateManifestIfNeededOption = ToolInstallCommandDefinition.CreateManifestIfNeededOption; - public static readonly Option AllowPackageDowngradeOption = new("--allow-downgrade") - { - Description = CliCommandStrings.AllowPackageDowngradeOptionDescription, - Arity = ArgumentArity.Zero - }; + public static readonly Option AllowPackageDowngradeOption = ToolInstallCommandDefinition.AllowPackageDowngradeOption; - public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + public static readonly Option VerbosityOption = ToolInstallCommandDefinition.VerbosityOption; - // Don't use the common options version as we don't want this to be a forwarded option - public static readonly Option ArchitectureOption = new("--arch", "-a") - { - Description = CliStrings.ArchitectureOptionDescription - }; + public static readonly Option ArchitectureOption = ToolInstallCommandDefinition.ArchitectureOption; - public static readonly Option RollForwardOption = new("--allow-roll-forward") - { - Description = CliCommandStrings.RollForwardOptionDescription, - Arity = ArgumentArity.Zero - }; + public static readonly Option RollForwardOption = ToolInstallCommandDefinition.RollForwardOption; - public static readonly Option GlobalOption = ToolAppliedOption.GlobalOption(CliCommandStrings.ToolInstallGlobalOptionDescription); + public static readonly Option GlobalOption = ToolInstallCommandDefinition.GlobalOption; - public static readonly Option LocalOption = ToolAppliedOption.LocalOption(CliCommandStrings.ToolInstallLocalOptionDescription); + public static readonly Option LocalOption = ToolInstallCommandDefinition.LocalOption; - public static readonly Option ToolPathOption = ToolAppliedOption.ToolPathOption(CliCommandStrings.ToolInstallToolPathOptionDescription); + public static readonly Option ToolPathOption = ToolInstallCommandDefinition.ToolPathOption; - public static readonly Option ToolManifestOption = ToolAppliedOption.ToolManifestOption(CliCommandStrings.ToolInstallManifestPathOptionDescription); + public static readonly Option ToolManifestOption = ToolInstallCommandDefinition.ToolManifestOption; private static readonly Command Command = ConstructCommand(); @@ -88,15 +51,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("install", CliCommandStrings.ToolInstallCommandDescription); - command.Arguments.Add(PackageIdentityArgument); - - AddCommandOptions(command); - - command.Options.Add(ArchitectureOption); - command.Options.Add(CreateManifestIfNeededOption); - command.Options.Add(AllowPackageDowngradeOption); - command.Options.Add(RollForwardOption); + Command command = ToolInstallCommandDefinition.Create(); command.SetAction((parseResult) => new ToolInstallCommand(parseResult).Execute()); @@ -105,23 +60,6 @@ private static Command ConstructCommand() public static Command AddCommandOptions(Command command) { - command.Options.Add(GlobalOption); - command.Options.Add(LocalOption); - command.Options.Add(ToolPathOption); - command.Options.Add(VersionOption); - command.Options.Add(ConfigOption); - command.Options.Add(ToolManifestOption); - command.Options.Add(AddSourceOption); - command.Options.Add(SourceOption); - command.Options.Add(FrameworkOption); - command.Options.Add(PrereleaseOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.DisableParallelOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.NoCacheOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.NoHttpCacheOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption); - command.Options.Add(VerbosityOption); - - return command; + return ToolInstallCommandDefinition.AddCommandOptions(command); } } diff --git a/src/Cli/dotnet/Commands/Tool/List/ToolListCommandDefinition.cs b/src/Cli/dotnet/Commands/Tool/List/ToolListCommandDefinition.cs new file mode 100644 index 000000000000..6e9ca95c7e90 --- /dev/null +++ b/src/Cli/dotnet/Commands/Tool/List/ToolListCommandDefinition.cs @@ -0,0 +1,46 @@ +// 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.Common; +using Microsoft.DotNet.Cli.Extensions; + +namespace Microsoft.DotNet.Cli.Commands.Tool.List; + +internal static class ToolListCommandDefinition +{ + public static readonly Argument PackageIdArgument = new("packageId") + { + HelpName = CliCommandStrings.ToolListPackageIdArgumentName, + Description = CliCommandStrings.ToolListPackageIdArgumentDescription, + Arity = ArgumentArity.ZeroOrOne, + }; + + public static readonly Option GlobalOption = ToolAppliedOption.GlobalOption(CliCommandStrings.ToolListGlobalOptionDescription); + + public static readonly Option LocalOption = ToolAppliedOption.LocalOption(CliCommandStrings.ToolListLocalOptionDescription); + + public static readonly Option ToolPathOption = ToolAppliedOption.ToolPathOption(CliCommandStrings.ToolListToolPathOptionDescription); + + public static readonly Option ToolListFormatOption = new("--format") + { + Arity = ArgumentArity.ZeroOrOne, + DefaultValueFactory = _ => ToolListOutputFormat.table, + Description = CliCommandStrings.ToolListFormatOptionDescription + }; + + public static Command Create() + { + Command command = new("list", CliCommandStrings.ToolListCommandDescription); + + command.Arguments.Add(PackageIdArgument); + command.Options.Add(GlobalOption); + command.Options.Add(LocalOption); + command.Options.Add(ToolPathOption); + command.Options.Add(ToolListFormatOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Tool/List/ToolListCommandParser.cs b/src/Cli/dotnet/Commands/Tool/List/ToolListCommandParser.cs index 89ad305f7872..18d15832e0cf 100644 --- a/src/Cli/dotnet/Commands/Tool/List/ToolListCommandParser.cs +++ b/src/Cli/dotnet/Commands/Tool/List/ToolListCommandParser.cs @@ -11,25 +11,15 @@ namespace Microsoft.DotNet.Cli.Commands.Tool.List; internal static class ToolListCommandParser { - public static readonly Argument PackageIdArgument = new("packageId") - { - HelpName = CliCommandStrings.ToolListPackageIdArgumentName, - Description = CliCommandStrings.ToolListPackageIdArgumentDescription, - Arity = ArgumentArity.ZeroOrOne, - }; + public static readonly Argument PackageIdArgument = ToolListCommandDefinition.PackageIdArgument; - public static readonly Option GlobalOption = ToolAppliedOption.GlobalOption(CliCommandStrings.ToolListGlobalOptionDescription); + public static readonly Option GlobalOption = ToolListCommandDefinition.GlobalOption; - public static readonly Option LocalOption = ToolAppliedOption.LocalOption(CliCommandStrings.ToolListLocalOptionDescription); + public static readonly Option LocalOption = ToolListCommandDefinition.LocalOption; - public static readonly Option ToolPathOption = ToolAppliedOption.ToolPathOption(CliCommandStrings.ToolListToolPathOptionDescription); + public static readonly Option ToolPathOption = ToolListCommandDefinition.ToolPathOption; - public static readonly Option ToolListFormatOption = new("--format") - { - Arity = ArgumentArity.ZeroOrOne, - DefaultValueFactory = _ => ToolListOutputFormat.table, - Description = CliCommandStrings.ToolListFormatOptionDescription - }; + public static readonly Option ToolListFormatOption = ToolListCommandDefinition.ToolListFormatOption; private static readonly Command Command = ConstructCommand(); @@ -40,13 +30,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("list", CliCommandStrings.ToolListCommandDescription); - - command.Arguments.Add(PackageIdArgument); - command.Options.Add(GlobalOption); - command.Options.Add(LocalOption); - command.Options.Add(ToolPathOption); - command.Options.Add(ToolListFormatOption); + Command command = ToolListCommandDefinition.Create(); command.SetAction((parseResult) => new ToolListCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommandDefinition.cs b/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommandDefinition.cs new file mode 100644 index 000000000000..364c7f92a5ef --- /dev/null +++ b/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommandDefinition.cs @@ -0,0 +1,39 @@ +// 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.Common; +using Microsoft.DotNet.Cli.Commands.Tool.Install; +using Microsoft.DotNet.Cli.Extensions; + +namespace Microsoft.DotNet.Cli.Commands.Tool.Restore; + +internal static class ToolRestoreCommandDefinition +{ + public static readonly Option ConfigOption = ToolInstallCommandParser.ConfigOption; + + public static readonly Option AddSourceOption = ToolInstallCommandParser.AddSourceOption; + + public static readonly Option ToolManifestOption = ToolAppliedOption.ToolManifestOption(CliCommandStrings.ToolRestoreManifestPathOptionDescription); + + public static readonly Option VerbosityOption = ToolInstallCommandParser.VerbosityOption; + + public static Command Create() + { + Command command = new("restore", CliCommandStrings.ToolRestoreCommandDescription); + + command.Options.Add(ConfigOption); + command.Options.Add(AddSourceOption); + command.Options.Add(ToolManifestOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.DisableParallelOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.NoCacheOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.NoHttpCacheOption); + command.Options.Add(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption); + command.Options.Add(VerbosityOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommandParser.cs b/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommandParser.cs index ee39785b855c..7cfc7d94590f 100644 --- a/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommandParser.cs +++ b/src/Cli/dotnet/Commands/Tool/Restore/ToolRestoreCommandParser.cs @@ -12,13 +12,13 @@ namespace Microsoft.DotNet.Cli.Commands.Tool.Restore; internal static class ToolRestoreCommandParser { - public static readonly Option ConfigOption = ToolInstallCommandParser.ConfigOption; + public static readonly Option ConfigOption = ToolRestoreCommandDefinition.ConfigOption; - public static readonly Option AddSourceOption = ToolInstallCommandParser.AddSourceOption; + public static readonly Option AddSourceOption = ToolRestoreCommandDefinition.AddSourceOption; - public static readonly Option ToolManifestOption = ToolAppliedOption.ToolManifestOption(CliCommandStrings.ToolRestoreManifestPathOptionDescription); + public static readonly Option ToolManifestOption = ToolRestoreCommandDefinition.ToolManifestOption; - public static readonly Option VerbosityOption = ToolInstallCommandParser.VerbosityOption; + public static readonly Option VerbosityOption = ToolRestoreCommandDefinition.VerbosityOption; private static readonly Command Command = ConstructCommand(); @@ -29,17 +29,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("restore", CliCommandStrings.ToolRestoreCommandDescription); - - command.Options.Add(ConfigOption); - command.Options.Add(AddSourceOption); - command.Options.Add(ToolManifestOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.DisableParallelOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.IgnoreFailedSourcesOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.NoCacheOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.NoHttpCacheOption); - command.Options.Add(ToolCommandRestorePassThroughOptions.InteractiveRestoreOption); - command.Options.Add(VerbosityOption); + Command command = ToolRestoreCommandDefinition.Create(); command.SetAction((parseResult) => new ToolRestoreCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Tool/Run/ToolRunCommandDefinition.cs b/src/Cli/dotnet/Commands/Tool/Run/ToolRunCommandDefinition.cs new file mode 100644 index 000000000000..985f74129824 --- /dev/null +++ b/src/Cli/dotnet/Commands/Tool/Run/ToolRunCommandDefinition.cs @@ -0,0 +1,39 @@ +// 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; + +namespace Microsoft.DotNet.Cli.Commands.Tool.Run; + +internal static class ToolRunCommandDefinition +{ + public static readonly Argument CommandNameArgument = new("commandName") + { + HelpName = CliCommandStrings.CommandNameArgumentName, + Description = CliCommandStrings.CommandNameArgumentDescription + }; + + public static readonly Argument> CommandArgument = new("toolArguments") + { + Description = CliCommandStrings.ToolRunArgumentsDescription + }; + + public static readonly Option RollForwardOption = new("--allow-roll-forward") + { + Description = CliCommandStrings.RollForwardOptionDescription, + Arity = ArgumentArity.Zero + }; + + public static Command Create() + { + Command command = new("run", CliCommandStrings.ToolRunCommandDescription); + + command.Arguments.Add(CommandNameArgument); + command.Arguments.Add(CommandArgument); + command.Options.Add(RollForwardOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Tool/Run/ToolRunCommandParser.cs b/src/Cli/dotnet/Commands/Tool/Run/ToolRunCommandParser.cs index 05d085926580..d621e649bcbf 100644 --- a/src/Cli/dotnet/Commands/Tool/Run/ToolRunCommandParser.cs +++ b/src/Cli/dotnet/Commands/Tool/Run/ToolRunCommandParser.cs @@ -9,22 +9,11 @@ namespace Microsoft.DotNet.Cli.Commands.Tool.Run; internal static class ToolRunCommandParser { - public static readonly Argument CommandNameArgument = new("commandName") - { - HelpName = CliCommandStrings.CommandNameArgumentName, - Description = CliCommandStrings.CommandNameArgumentDescription - }; + public static readonly Argument CommandNameArgument = ToolRunCommandDefinition.CommandNameArgument; - public static readonly Argument> CommandArgument = new("toolArguments") - { - Description = CliCommandStrings.ToolRunArgumentsDescription - }; + public static readonly Argument> CommandArgument = ToolRunCommandDefinition.CommandArgument; - public static readonly Option RollForwardOption = new("--allow-roll-forward") - { - Description = CliCommandStrings.RollForwardOptionDescription, - Arity = ArgumentArity.Zero - }; + public static readonly Option RollForwardOption = ToolRunCommandDefinition.RollForwardOption; private static readonly Command Command = ConstructCommand(); @@ -35,11 +24,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("run", CliCommandStrings.ToolRunCommandDescription); - - command.Arguments.Add(CommandNameArgument); - command.Arguments.Add(CommandArgument); - command.Options.Add(RollForwardOption); + Command command = ToolRunCommandDefinition.Create(); command.SetAction((parseResult) => new ToolRunCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Tool/Search/ToolSearchCommandDefinition.cs b/src/Cli/dotnet/Commands/Tool/Search/ToolSearchCommandDefinition.cs new file mode 100644 index 000000000000..12f88fb10398 --- /dev/null +++ b/src/Cli/dotnet/Commands/Tool/Search/ToolSearchCommandDefinition.cs @@ -0,0 +1,55 @@ +// 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; + +namespace Microsoft.DotNet.Cli.Commands.Tool.Search; + +internal static class ToolSearchCommandDefinition +{ + public static readonly Argument SearchTermArgument = new("searchTerm") + { + HelpName = CliCommandStrings.ToolSearchSearchTermArgumentName, + Description = CliCommandStrings.ToolSearchSearchTermDescription + }; + + public static readonly Option DetailOption = new("--detail") + { + Description = CliCommandStrings.DetailDescription, + Arity = ArgumentArity.Zero + }; + + public static readonly Option SkipOption = new("--skip") + { + Description = CliCommandStrings.ToolSearchSkipDescription, + HelpName = CliCommandStrings.ToolSearchSkipArgumentName + }; + + public static readonly Option TakeOption = new("--take") + { + Description = CliCommandStrings.ToolSearchTakeDescription, + HelpName = CliCommandStrings.ToolSearchTakeArgumentName + }; + + public static readonly Option PrereleaseOption = new("--prerelease") + { + Description = CliCommandStrings.ToolSearchPrereleaseDescription, + Arity = ArgumentArity.Zero + }; + + public static Command Create() + { + Command command = new("search", CliCommandStrings.ToolSearchCommandDescription); + + command.Arguments.Add(SearchTermArgument); + + command.Options.Add(DetailOption); + command.Options.Add(SkipOption); + command.Options.Add(TakeOption); + command.Options.Add(PrereleaseOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Tool/Search/ToolSearchCommandParser.cs b/src/Cli/dotnet/Commands/Tool/Search/ToolSearchCommandParser.cs index 2be6a3a4e7ec..7379f03c6f21 100644 --- a/src/Cli/dotnet/Commands/Tool/Search/ToolSearchCommandParser.cs +++ b/src/Cli/dotnet/Commands/Tool/Search/ToolSearchCommandParser.cs @@ -9,35 +9,15 @@ namespace Microsoft.DotNet.Cli.Commands.Tool.Search; internal static class ToolSearchCommandParser { - public static readonly Argument SearchTermArgument = new("searchTerm") - { - HelpName = CliCommandStrings.ToolSearchSearchTermArgumentName, - Description = CliCommandStrings.ToolSearchSearchTermDescription - }; + public static readonly Argument SearchTermArgument = ToolSearchCommandDefinition.SearchTermArgument; - public static readonly Option DetailOption = new("--detail") - { - Description = CliCommandStrings.DetailDescription, - Arity = ArgumentArity.Zero - }; + public static readonly Option DetailOption = ToolSearchCommandDefinition.DetailOption; - public static readonly Option SkipOption = new("--skip") - { - Description = CliCommandStrings.ToolSearchSkipDescription, - HelpName = CliCommandStrings.ToolSearchSkipArgumentName - }; + public static readonly Option SkipOption = ToolSearchCommandDefinition.SkipOption; - public static readonly Option TakeOption = new("--take") - { - Description = CliCommandStrings.ToolSearchTakeDescription, - HelpName = CliCommandStrings.ToolSearchTakeArgumentName - }; + public static readonly Option TakeOption = ToolSearchCommandDefinition.TakeOption; - public static readonly Option PrereleaseOption = new("--prerelease") - { - Description = CliCommandStrings.ToolSearchPrereleaseDescription, - Arity = ArgumentArity.Zero - }; + public static readonly Option PrereleaseOption = ToolSearchCommandDefinition.PrereleaseOption; private static readonly Command Command = ConstructCommand(); @@ -48,14 +28,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("search", CliCommandStrings.ToolSearchCommandDescription); - - command.Arguments.Add(SearchTermArgument); - - command.Options.Add(DetailOption); - command.Options.Add(SkipOption); - command.Options.Add(TakeOption); - command.Options.Add(PrereleaseOption); + Command command = ToolSearchCommandDefinition.Create(); command.SetAction((parseResult) => new ToolSearchCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Tool/Uninstall/ToolUninstallCommandDefinition.cs b/src/Cli/dotnet/Commands/Tool/Uninstall/ToolUninstallCommandDefinition.cs new file mode 100644 index 000000000000..959dfbef2a31 --- /dev/null +++ b/src/Cli/dotnet/Commands/Tool/Uninstall/ToolUninstallCommandDefinition.cs @@ -0,0 +1,43 @@ +// 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.Common; +using Microsoft.DotNet.Cli.Commands.Tool.Install; +using Microsoft.DotNet.Cli.Extensions; +using NuGet.Packaging.Core; + +namespace Microsoft.DotNet.Cli.Commands.Tool.Uninstall; + +internal static class ToolUninstallCommandDefinition +{ + public static readonly Argument PackageIdArgument = new("packageId") + { + HelpName = "PACKAGE_ID", + Description = CliStrings.PackageReference, + Arity = ArgumentArity.ExactlyOne + }; + + public static readonly Option GlobalOption = ToolAppliedOption.GlobalOption(CliCommandStrings.ToolUninstallGlobalOptionDescription); + + public static readonly Option LocalOption = ToolAppliedOption.LocalOption(CliCommandStrings.ToolUninstallLocalOptionDescription); + + public static readonly Option ToolPathOption = ToolAppliedOption.ToolPathOption(CliCommandStrings.ToolUninstallToolPathOptionDescription); + + public static readonly Option ToolManifestOption = ToolAppliedOption.ToolManifestOption(CliCommandStrings.ToolUninstallManifestPathOptionDescription); + + public static Command Create() + { + Command command = new("uninstall", CliCommandStrings.ToolUninstallCommandDescription); + + command.Arguments.Add(PackageIdArgument); + command.Options.Add(GlobalOption); + command.Options.Add(LocalOption); + command.Options.Add(ToolPathOption); + command.Options.Add(ToolManifestOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Tool/Uninstall/ToolUninstallCommandParser.cs b/src/Cli/dotnet/Commands/Tool/Uninstall/ToolUninstallCommandParser.cs index 5ec3e2ce05b4..8de86a2613d6 100644 --- a/src/Cli/dotnet/Commands/Tool/Uninstall/ToolUninstallCommandParser.cs +++ b/src/Cli/dotnet/Commands/Tool/Uninstall/ToolUninstallCommandParser.cs @@ -13,20 +13,15 @@ namespace Microsoft.DotNet.Cli.Commands.Tool.Uninstall; internal static class ToolUninstallCommandParser { - public static readonly Argument PackageIdArgument = new("packageId") - { - HelpName = "PACKAGE_ID", - Description = CliStrings.PackageReference, - Arity = ArgumentArity.ExactlyOne - }; + public static readonly Argument PackageIdArgument = ToolUninstallCommandDefinition.PackageIdArgument; - public static readonly Option GlobalOption = ToolAppliedOption.GlobalOption(CliCommandStrings.ToolUninstallGlobalOptionDescription); + public static readonly Option GlobalOption = ToolUninstallCommandDefinition.GlobalOption; - public static readonly Option LocalOption = ToolAppliedOption.LocalOption(CliCommandStrings.ToolUninstallLocalOptionDescription); + public static readonly Option LocalOption = ToolUninstallCommandDefinition.LocalOption; - public static readonly Option ToolPathOption = ToolAppliedOption.ToolPathOption(CliCommandStrings.ToolUninstallToolPathOptionDescription); + public static readonly Option ToolPathOption = ToolUninstallCommandDefinition.ToolPathOption; - public static readonly Option ToolManifestOption = ToolAppliedOption.ToolManifestOption(CliCommandStrings.ToolUninstallManifestPathOptionDescription); + public static readonly Option ToolManifestOption = ToolUninstallCommandDefinition.ToolManifestOption; private static readonly Command Command = ConstructCommand(); @@ -37,13 +32,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("uninstall", CliCommandStrings.ToolUninstallCommandDescription); - - command.Arguments.Add(PackageIdArgument); - command.Options.Add(GlobalOption); - command.Options.Add(LocalOption); - command.Options.Add(ToolPathOption); - command.Options.Add(ToolManifestOption); + Command command = ToolUninstallCommandDefinition.Create(); command.SetAction((parseResult) => new ToolUninstallCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Tool/Update/ToolUpdateCommandDefinition.cs b/src/Cli/dotnet/Commands/Tool/Update/ToolUpdateCommandDefinition.cs new file mode 100644 index 000000000000..754e366bf257 --- /dev/null +++ b/src/Cli/dotnet/Commands/Tool/Update/ToolUpdateCommandDefinition.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.CommandLine; +using Microsoft.DotNet.Cli.Commands.Tool.Common; +using Microsoft.DotNet.Cli.Commands.Tool.Install; + +namespace Microsoft.DotNet.Cli.Commands.Tool.Update; + +internal static class ToolUpdateCommandDefinition +{ + public static readonly Argument PackageIdentityArgument = CommonArguments.OptionalPackageIdentityArgument("dotnetsay", "2.1.7"); + + public static readonly Option UpdateAllOption = ToolAppliedOption.UpdateAllOption; + + public static readonly Option AllowPackageDowngradeOption = ToolInstallCommandParser.AllowPackageDowngradeOption; + + public static Command Create() + { + Command command = new("update", CliCommandStrings.ToolUpdateCommandDescription); + + command.Arguments.Add(PackageIdentityArgument); + + ToolInstallCommandParser.AddCommandOptions(command); + command.Options.Add(AllowPackageDowngradeOption); + command.Options.Add(UpdateAllOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Tool/Update/ToolUpdateCommandParser.cs b/src/Cli/dotnet/Commands/Tool/Update/ToolUpdateCommandParser.cs index f29fce2f7086..9dba4aba74cf 100644 --- a/src/Cli/dotnet/Commands/Tool/Update/ToolUpdateCommandParser.cs +++ b/src/Cli/dotnet/Commands/Tool/Update/ToolUpdateCommandParser.cs @@ -9,11 +9,11 @@ namespace Microsoft.DotNet.Cli.Commands.Tool.Update; internal static class ToolUpdateCommandParser { - public static readonly Argument PackageIdentityArgument = CommonArguments.OptionalPackageIdentityArgument("dotnetsay", "2.1.7"); + public static readonly Argument PackageIdentityArgument = ToolUpdateCommandDefinition.PackageIdentityArgument; - public static readonly Option UpdateAllOption = ToolAppliedOption.UpdateAllOption; + public static readonly Option UpdateAllOption = ToolUpdateCommandDefinition.UpdateAllOption; - public static readonly Option AllowPackageDowngradeOption = ToolInstallCommandParser.AllowPackageDowngradeOption; + public static readonly Option AllowPackageDowngradeOption = ToolUpdateCommandDefinition.AllowPackageDowngradeOption; private static readonly Command Command = ConstructCommand(); @@ -24,13 +24,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("update", CliCommandStrings.ToolUpdateCommandDescription); - - command.Arguments.Add(PackageIdentityArgument); - - ToolInstallCommandParser.AddCommandOptions(command); - command.Options.Add(AllowPackageDowngradeOption); - command.Options.Add(UpdateAllOption); + Command command = ToolUpdateCommandDefinition.Create(); command.SetAction((parseResult) => new ToolUpdateCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/Clean/WorkloadCleanCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Clean/WorkloadCleanCommandDefinition.cs new file mode 100644 index 000000000000..dfdbb545f469 --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Clean/WorkloadCleanCommandDefinition.cs @@ -0,0 +1,22 @@ +// 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; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Clean; + +internal static class WorkloadCleanCommandDefinition +{ + public static readonly Option CleanAllOption = new("--all") { Description = CliCommandStrings.CleanAllOptionDescription }; + + public static Command Create() + { + Command command = new("clean", CliCommandStrings.WorkloadCleanCommandDescription); + + command.Options.Add(CleanAllOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Clean/WorkloadCleanCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Clean/WorkloadCleanCommandParser.cs index bb012ccfe442..be543c489b56 100644 --- a/src/Cli/dotnet/Commands/Workload/Clean/WorkloadCleanCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Clean/WorkloadCleanCommandParser.cs @@ -9,7 +9,7 @@ namespace Microsoft.DotNet.Cli.Commands.Workload.Clean; internal static class WorkloadCleanCommandParser { - public static readonly Option CleanAllOption = new("--all") { Description = CliCommandStrings.CleanAllOptionDescription }; + public static readonly Option CleanAllOption = WorkloadCleanCommandDefinition.CleanAllOption; private static readonly Command Command = ConstructCommand(); @@ -20,9 +20,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("clean", CliCommandStrings.WorkloadCleanCommandDescription); - - command.Options.Add(CleanAllOption); + Command command = WorkloadCleanCommandDefinition.Create(); command.SetAction((parseResult) => new WorkloadCleanCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/Config/WorkloadConfigCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Config/WorkloadConfigCommandDefinition.cs new file mode 100644 index 000000000000..19b7f16f5939 --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Config/WorkloadConfigCommandDefinition.cs @@ -0,0 +1,32 @@ +// 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; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Config; + +internal static class WorkloadConfigCommandDefinition +{ + // dotnet workload config --update-mode workload-set + + public static readonly string UpdateMode_WorkloadSet = "workload-set"; + public static readonly string UpdateMode_Manifests = "manifests"; + + public static readonly Option UpdateMode = new("--update-mode") + { + Description = CliCommandStrings.UpdateModeDescription, + Arity = ArgumentArity.ZeroOrOne + }; + + public static Command Create() + { + UpdateMode.AcceptOnlyFromAmong(UpdateMode_WorkloadSet, UpdateMode_Manifests); + + Command command = new("config", CliCommandStrings.WorkloadConfigCommandDescription); + command.Options.Add(UpdateMode); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Config/WorkloadConfigCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Config/WorkloadConfigCommandParser.cs index 0ddd6481ab7b..710c676e2ff7 100644 --- a/src/Cli/dotnet/Commands/Workload/Config/WorkloadConfigCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Config/WorkloadConfigCommandParser.cs @@ -11,14 +11,10 @@ internal static class WorkloadConfigCommandParser { // dotnet workload config --update-mode workload-set - public static readonly string UpdateMode_WorkloadSet = "workload-set"; - public static readonly string UpdateMode_Manifests = "manifests"; + public static readonly string UpdateMode_WorkloadSet = WorkloadConfigCommandDefinition.UpdateMode_WorkloadSet; + public static readonly string UpdateMode_Manifests = WorkloadConfigCommandDefinition.UpdateMode_Manifests; - public static readonly Option UpdateMode = new("--update-mode") - { - Description = CliCommandStrings.UpdateModeDescription, - Arity = ArgumentArity.ZeroOrOne - }; + public static readonly Option UpdateMode = WorkloadConfigCommandDefinition.UpdateMode; private static readonly Command Command = ConstructCommand(); @@ -29,10 +25,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - UpdateMode.AcceptOnlyFromAmong(UpdateMode_WorkloadSet, UpdateMode_Manifests); - - Command command = new("config", CliCommandStrings.WorkloadConfigCommandDescription); - command.Options.Add(UpdateMode); + Command command = WorkloadConfigCommandDefinition.Create(); command.SetAction(parseResult => { diff --git a/src/Cli/dotnet/Commands/Workload/Elevate/WorkloadElevateCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Elevate/WorkloadElevateCommandDefinition.cs new file mode 100644 index 000000000000..942f7205f630 --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Elevate/WorkloadElevateCommandDefinition.cs @@ -0,0 +1,21 @@ +// 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; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Elevate; + +internal static class WorkloadElevateCommandDefinition +{ + public static Command Create() + { + Command command = new("elevate", CliCommandStrings.WorkloadElevateCommandDescription) + { + Hidden = true + }; + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Elevate/WorkloadElevateCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Elevate/WorkloadElevateCommandParser.cs index f20c589e2f16..9a6a28874fb4 100644 --- a/src/Cli/dotnet/Commands/Workload/Elevate/WorkloadElevateCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Elevate/WorkloadElevateCommandParser.cs @@ -18,10 +18,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("elevate", CliCommandStrings.WorkloadElevateCommandDescription) - { - Hidden = true - }; + Command command = WorkloadElevateCommandDefinition.Create(); command.SetAction((parseResult) => new WorkloadElevateCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/History/WorkloadHistoryCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/History/WorkloadHistoryCommandDefinition.cs new file mode 100644 index 000000000000..30388537d189 --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/History/WorkloadHistoryCommandDefinition.cs @@ -0,0 +1,18 @@ +// 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; + +namespace Microsoft.DotNet.Cli.Commands.Workload.History; + +internal static class WorkloadHistoryCommandDefinition +{ + public static Command Create() + { + var command = new Command("history", CliCommandStrings.WorkloadHistoryCommandDescription); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/History/WorkloadHistoryCommandParser.cs b/src/Cli/dotnet/Commands/Workload/History/WorkloadHistoryCommandParser.cs index 1e3f596c0572..cf6fb74c818d 100644 --- a/src/Cli/dotnet/Commands/Workload/History/WorkloadHistoryCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/History/WorkloadHistoryCommandParser.cs @@ -18,7 +18,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - var command = new Command("history", CliCommandStrings.WorkloadHistoryCommandDescription); + var command = WorkloadHistoryCommandDefinition.Create(); command.SetAction(parseResult => new WorkloadHistoryCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommandDefinition.cs new file mode 100644 index 000000000000..3ee65b16cae1 --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommandDefinition.cs @@ -0,0 +1,58 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.CommandLine; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Install; + +internal static class WorkloadInstallCommandDefinition +{ + public static readonly Argument> WorkloadIdArgument = new("workloadId") + { + HelpName = CliCommandStrings.WorkloadIdArgumentName, + Arity = ArgumentArity.OneOrMore, + Description = CliCommandStrings.WorkloadIdArgumentDescription + }; + + public static readonly Option SkipSignCheckOption = new("--skip-sign-check") + { + Description = CliCommandStrings.SkipSignCheckOptionDescription, + Hidden = true, + Arity = ArgumentArity.Zero + }; + + public static readonly Option SkipManifestUpdateOption = new("--skip-manifest-update") + { + Description = CliCommandStrings.SkipManifestUpdateOptionDescription, + Arity = ArgumentArity.Zero + }; + + public static readonly Option TempDirOption = new("--temp-dir") + { + Description = CliCommandStrings.TempDirOptionDescription + }; + + public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + + public static Command Create() + { + Command command = new("install", CliCommandStrings.WorkloadInstallCommandDescription); + + command.Arguments.Add(WorkloadIdArgument); + AddWorkloadInstallCommandOptions(command); + + return command; + } + + internal static void AddWorkloadInstallCommandOptions(Command command) + { + InstallingWorkloadCommandParser.AddWorkloadInstallCommandOptions(command); + + command.Options.Add(SkipManifestUpdateOption); + command.Options.Add(TempDirOption); + command.AddWorkloadCommandNuGetRestoreActionConfigOptions(); + command.Options.Add(VerbosityOption); + command.Options.Add(SkipSignCheckOption); + command.Options.Add(InstallingWorkloadCommandParser.WorkloadSetVersionOption); + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommandParser.cs index 36ae60c10e50..52f69d2cdb48 100644 --- a/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Install/WorkloadInstallCommandParser.cs @@ -7,32 +7,15 @@ namespace Microsoft.DotNet.Cli.Commands.Workload.Install; internal static class WorkloadInstallCommandParser { - public static readonly Argument> WorkloadIdArgument = new("workloadId") - { - HelpName = CliCommandStrings.WorkloadIdArgumentName, - Arity = ArgumentArity.OneOrMore, - Description = CliCommandStrings.WorkloadIdArgumentDescription - }; + public static readonly Argument> WorkloadIdArgument = WorkloadInstallCommandDefinition.WorkloadIdArgument; - public static readonly Option SkipSignCheckOption = new("--skip-sign-check") - { - Description = CliCommandStrings.SkipSignCheckOptionDescription, - Hidden = true, - Arity = ArgumentArity.Zero - }; + public static readonly Option SkipSignCheckOption = WorkloadInstallCommandDefinition.SkipSignCheckOption; - public static readonly Option SkipManifestUpdateOption = new("--skip-manifest-update") - { - Description = CliCommandStrings.SkipManifestUpdateOptionDescription, - Arity = ArgumentArity.Zero - }; + public static readonly Option SkipManifestUpdateOption = WorkloadInstallCommandDefinition.SkipManifestUpdateOption; - public static readonly Option TempDirOption = new("--temp-dir") - { - Description = CliCommandStrings.TempDirOptionDescription - }; + public static readonly Option TempDirOption = WorkloadInstallCommandDefinition.TempDirOption; - public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + public static readonly Option VerbosityOption = WorkloadInstallCommandDefinition.VerbosityOption; private static readonly Command Command = ConstructCommand(); @@ -43,10 +26,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("install", CliCommandStrings.WorkloadInstallCommandDescription); - - command.Arguments.Add(WorkloadIdArgument); - AddWorkloadInstallCommandOptions(command); + Command command = WorkloadInstallCommandDefinition.Create(); command.SetAction((parseResult) => new WorkloadInstallCommand(parseResult).Execute()); @@ -55,13 +35,7 @@ private static Command ConstructCommand() internal static void AddWorkloadInstallCommandOptions(Command command) { - InstallingWorkloadCommandParser.AddWorkloadInstallCommandOptions(command); - - command.Options.Add(SkipManifestUpdateOption); - command.Options.Add(TempDirOption); - command.AddWorkloadCommandNuGetRestoreActionConfigOptions(); - command.Options.Add(VerbosityOption); - command.Options.Add(SkipSignCheckOption); - command.Options.Add(InstallingWorkloadCommandParser.WorkloadSetVersionOption); + WorkloadInstallCommandDefinition.AddWorkloadInstallCommandOptions(command); } } + diff --git a/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommandDefinition.cs new file mode 100644 index 000000000000..4e383a284804 --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommandDefinition.cs @@ -0,0 +1,40 @@ +// 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.CommandLine; + +namespace Microsoft.DotNet.Cli.Commands.Workload.List; + +internal static class WorkloadListCommandDefinition +{ + // arguments are a list of workload to be detected + public static readonly Option MachineReadableOption = new("--machine-readable") { Hidden = true }; + + public static readonly Option VersionOption = InstallingWorkloadCommandParser.VersionOption; + + public static readonly Option TempDirOption = new Option("--temp-dir") + { + Description = CliCommandStrings.TempDirOptionDescription + }.Hide(); + + public static readonly Option IncludePreviewsOption = new Option("--include-previews") + { + Description = CliCommandStrings.IncludePreviewOptionDescription + }.Hide(); + + public static Command Create() + { + Command command = new("list", CliCommandStrings.WorkloadListCommandDescription); + command.Options.Add(MachineReadableOption); + command.Options.Add(CommonOptions.HiddenVerbosityOption); + command.Options.Add(VersionOption); + command.Options.Add(TempDirOption); + command.Options.Add(IncludePreviewsOption); + command.AddWorkloadCommandNuGetRestoreActionConfigOptions(true); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommandParser.cs b/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommandParser.cs index ac7823f6b513..135b8f9c4751 100644 --- a/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/List/WorkloadListCommandParser.cs @@ -11,19 +11,13 @@ namespace Microsoft.DotNet.Cli.Commands.Workload.List; internal static class WorkloadListCommandParser { // arguments are a list of workload to be detected - public static readonly Option MachineReadableOption = new("--machine-readable") { Hidden = true }; + public static readonly Option MachineReadableOption = WorkloadListCommandDefinition.MachineReadableOption; - public static readonly Option VersionOption = InstallingWorkloadCommandParser.VersionOption; + public static readonly Option VersionOption = WorkloadListCommandDefinition.VersionOption; - public static readonly Option TempDirOption = new Option("--temp-dir") - { - Description = CliCommandStrings.TempDirOptionDescription - }.Hide(); + public static readonly Option TempDirOption = WorkloadListCommandDefinition.TempDirOption; - public static readonly Option IncludePreviewsOption = new Option("--include-previews") - { - Description = CliCommandStrings.IncludePreviewOptionDescription - }.Hide(); + public static readonly Option IncludePreviewsOption = WorkloadListCommandDefinition.IncludePreviewsOption; private static readonly Command Command = ConstructCommand(); @@ -34,13 +28,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("list", CliCommandStrings.WorkloadListCommandDescription); - command.Options.Add(MachineReadableOption); - command.Options.Add(CommonOptions.HiddenVerbosityOption); - command.Options.Add(VersionOption); - command.Options.Add(TempDirOption); - command.Options.Add(IncludePreviewsOption); - command.AddWorkloadCommandNuGetRestoreActionConfigOptions(true); + Command command = WorkloadListCommandDefinition.Create(); command.SetAction((parseResult) => new WorkloadListCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/Repair/WorkloadRepairCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Repair/WorkloadRepairCommandDefinition.cs new file mode 100644 index 000000000000..6c46b91742fb --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Repair/WorkloadRepairCommandDefinition.cs @@ -0,0 +1,32 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.CommandLine; +using Microsoft.DotNet.Cli.Commands.Workload.Install; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Repair; + +internal static class WorkloadRepairCommandDefinition +{ + public static readonly Option ConfigOption = InstallingWorkloadCommandParser.ConfigOption; + + public static readonly Option SourceOption = InstallingWorkloadCommandParser.SourceOption; + + public static readonly Option VersionOption = InstallingWorkloadCommandParser.VersionOption; + + public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + + public static Command Create() + { + Command command = new("repair", CliCommandStrings.WorkloadRepairCommandDescription); + + command.Options.Add(VersionOption); + command.Options.Add(ConfigOption); + command.Options.Add(SourceOption); + command.Options.Add(VerbosityOption); + command.AddWorkloadCommandNuGetRestoreActionConfigOptions(); + command.Options.Add(WorkloadInstallCommandParser.SkipSignCheckOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Repair/WorkloadRepairCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Repair/WorkloadRepairCommandParser.cs index 2afba3218845..9baa5bf4b513 100644 --- a/src/Cli/dotnet/Commands/Workload/Repair/WorkloadRepairCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Repair/WorkloadRepairCommandParser.cs @@ -8,13 +8,13 @@ namespace Microsoft.DotNet.Cli.Commands.Workload.Repair; internal static class WorkloadRepairCommandParser { - public static readonly Option ConfigOption = InstallingWorkloadCommandParser.ConfigOption; + public static readonly Option ConfigOption = WorkloadRepairCommandDefinition.ConfigOption; - public static readonly Option SourceOption = InstallingWorkloadCommandParser.SourceOption; + public static readonly Option SourceOption = WorkloadRepairCommandDefinition.SourceOption; - public static readonly Option VersionOption = InstallingWorkloadCommandParser.VersionOption; + public static readonly Option VersionOption = WorkloadRepairCommandDefinition.VersionOption; - public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + public static readonly Option VerbosityOption = WorkloadRepairCommandDefinition.VerbosityOption; private static readonly Command Command = ConstructCommand(); @@ -25,14 +25,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("repair", CliCommandStrings.WorkloadRepairCommandDescription); - - command.Options.Add(VersionOption); - command.Options.Add(ConfigOption); - command.Options.Add(SourceOption); - command.Options.Add(VerbosityOption); - command.AddWorkloadCommandNuGetRestoreActionConfigOptions(); - command.Options.Add(WorkloadInstallCommandParser.SkipSignCheckOption); + Command command = WorkloadRepairCommandDefinition.Create(); command.SetAction((parseResult) => new WorkloadRepairCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommandDefinition.cs new file mode 100644 index 000000000000..ee019d9ca1f0 --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommandDefinition.cs @@ -0,0 +1,29 @@ +// 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.Restore; +using Microsoft.DotNet.Cli.Commands.Workload.Install; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Restore; + +internal static class WorkloadRestoreCommandDefinition +{ + public static readonly Argument> SlnOrProjectArgument = new(CliStrings.SolutionOrProjectArgumentName) + { + Description = CliStrings.SolutionOrProjectArgumentDescription, + Arity = ArgumentArity.ZeroOrMore + }; + + public static Command Create() + { + Command command = new("restore", CliCommandStrings.WorkloadRestoreCommandDescription); + + command.Arguments.Add(SlnOrProjectArgument); + WorkloadInstallCommandParser.AddWorkloadInstallCommandOptions(command); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommandParser.cs index f517783429c5..a0d9ea021fb4 100644 --- a/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Restore/WorkloadRestoreCommandParser.cs @@ -11,11 +11,7 @@ namespace Microsoft.DotNet.Cli.Commands.Workload.Restore; internal static class WorkloadRestoreCommandParser { - public static readonly Argument> SlnOrProjectArgument = new(CliStrings.SolutionOrProjectArgumentName) - { - Description = CliStrings.SolutionOrProjectArgumentDescription, - Arity = ArgumentArity.ZeroOrMore - }; + public static readonly Argument> SlnOrProjectArgument = WorkloadRestoreCommandDefinition.SlnOrProjectArgument; private static readonly Command Command = ConstructCommand(); @@ -26,10 +22,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("restore", CliCommandStrings.WorkloadRestoreCommandDescription); - - command.Arguments.Add(SlnOrProjectArgument); - WorkloadInstallCommandParser.AddWorkloadInstallCommandOptions(command); + Command command = WorkloadRestoreCommandDefinition.Create(); command.SetAction((parseResult) => new WorkloadRestoreCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchCommandDefinition.cs new file mode 100644 index 000000000000..867457386bf8 --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchCommandDefinition.cs @@ -0,0 +1,31 @@ +// 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; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Search; + +internal static class WorkloadSearchCommandDefinition +{ + public static readonly Argument WorkloadIdStubArgument = + new(CliCommandStrings.WorkloadIdStubArgumentName) + { + Arity = ArgumentArity.ZeroOrOne, + Description = CliCommandStrings.WorkloadIdStubArgumentDescription + }; + + public static readonly Option VersionOption = InstallingWorkloadCommandParser.VersionOption; + + public static Command Create() + { + var command = new Command("search", CliCommandStrings.WorkloadSearchCommandDescription); + command.Subcommands.Add(WorkloadSearchVersionsCommandParser.GetCommand()); + command.Arguments.Add(WorkloadIdStubArgument); + command.Options.Add(CommonOptions.HiddenVerbosityOption); + command.Options.Add(VersionOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchCommandParser.cs index 584e99924348..9f5d3b80f88f 100644 --- a/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchCommandParser.cs @@ -9,14 +9,9 @@ namespace Microsoft.DotNet.Cli.Commands.Workload.Search; internal static class WorkloadSearchCommandParser { - public static readonly Argument WorkloadIdStubArgument = - new(CliCommandStrings.WorkloadIdStubArgumentName) - { - Arity = ArgumentArity.ZeroOrOne, - Description = CliCommandStrings.WorkloadIdStubArgumentDescription - }; + public static readonly Argument WorkloadIdStubArgument = WorkloadSearchCommandDefinition.WorkloadIdStubArgument; - public static readonly Option VersionOption = InstallingWorkloadCommandParser.VersionOption; + public static readonly Option VersionOption = WorkloadSearchCommandDefinition.VersionOption; private static readonly Command Command = ConstructCommand(); @@ -27,11 +22,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - var command = new Command("search", CliCommandStrings.WorkloadSearchCommandDescription); - command.Subcommands.Add(WorkloadSearchVersionsCommandParser.GetCommand()); - command.Arguments.Add(WorkloadIdStubArgument); - command.Options.Add(CommonOptions.HiddenVerbosityOption); - command.Options.Add(VersionOption); + var command = WorkloadSearchCommandDefinition.Create(); command.SetAction((parseResult) => new WorkloadSearchCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchVersionsCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchVersionsCommandDefinition.cs new file mode 100644 index 000000000000..65ffa68b143b --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchVersionsCommandDefinition.cs @@ -0,0 +1,63 @@ +// 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; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Search; + +internal static class WorkloadSearchVersionsCommandDefinition +{ + public static readonly Argument> WorkloadVersionArgument = + new(CliCommandStrings.WorkloadVersionArgument) + { + Arity = ArgumentArity.ZeroOrMore, + Description = CliCommandStrings.WorkloadVersionArgumentDescription + }; + + public static readonly Option TakeOption = new("--take") { DefaultValueFactory = (_) => 5 }; + + public static readonly Option FormatOption = new("--format") + { + Description = CliCommandStrings.FormatOptionDescription + }; + + public static readonly Option IncludePreviewsOption = new("--include-previews"); + + public static Command Create() + { + var command = new Command("version", CliCommandStrings.PrintSetVersionsDescription); + command.Arguments.Add(WorkloadVersionArgument); + command.Options.Add(FormatOption); + command.Options.Add(TakeOption); + command.Options.Add(IncludePreviewsOption); + + TakeOption.Validators.Add(optionResult => + { + if (optionResult.GetValueOrDefault() <= 0) + { + throw new ArgumentException("The --take option must be positive."); + } + }); + + command.Validators.Add(result => + { + if (result.GetValue(WorkloadSearchCommandParser.WorkloadIdStubArgument) != null) + { + result.AddError(string.Format(CliCommandStrings.CannotCombineSearchStringAndVersion, WorkloadSearchCommandParser.WorkloadIdStubArgument.Name, command.Name)); + } + }); + + command.Validators.Add(result => + { + var versionArgument = result.GetValue(WorkloadVersionArgument); + if (versionArgument is not null && !versionArgument.All(v => v.Contains('@')) && !WorkloadSetVersion.IsWorkloadSetPackageVersion(versionArgument.SingleOrDefault(defaultValue: string.Empty))) + { + result.AddError(string.Format(CliStrings.UnrecognizedCommandOrArgument, string.Join(' ', versionArgument))); + } + }); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchVersionsCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchVersionsCommandParser.cs index a9a64d756313..b6054c06b273 100644 --- a/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchVersionsCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Search/WorkloadSearchVersionsCommandParser.cs @@ -9,21 +9,13 @@ namespace Microsoft.DotNet.Cli.Commands.Workload.Search; internal static class WorkloadSearchVersionsCommandParser { - public static readonly Argument> WorkloadVersionArgument = - new(CliCommandStrings.WorkloadVersionArgument) - { - Arity = ArgumentArity.ZeroOrMore, - Description = CliCommandStrings.WorkloadVersionArgumentDescription - }; + public static readonly Argument> WorkloadVersionArgument = WorkloadSearchVersionsCommandDefinition.WorkloadVersionArgument; - public static readonly Option TakeOption = new("--take") { DefaultValueFactory = (_) => 5 }; + public static readonly Option TakeOption = WorkloadSearchVersionsCommandDefinition.TakeOption; - public static readonly Option FormatOption = new("--format") - { - Description = CliCommandStrings.FormatOptionDescription - }; + public static readonly Option FormatOption = WorkloadSearchVersionsCommandDefinition.FormatOption; - public static readonly Option IncludePreviewsOption = new("--include-previews"); + public static readonly Option IncludePreviewsOption = WorkloadSearchVersionsCommandDefinition.IncludePreviewsOption; private static readonly Command Command = ConstructCommand(); @@ -34,36 +26,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - var command = new Command("version", CliCommandStrings.PrintSetVersionsDescription); - command.Arguments.Add(WorkloadVersionArgument); - command.Options.Add(FormatOption); - command.Options.Add(TakeOption); - command.Options.Add(IncludePreviewsOption); - - TakeOption.Validators.Add(optionResult => - { - if (optionResult.GetValueOrDefault() <= 0) - { - throw new ArgumentException("The --take option must be positive."); - } - }); - - command.Validators.Add(result => - { - if (result.GetValue(WorkloadSearchCommandParser.WorkloadIdStubArgument) != null) - { - result.AddError(string.Format(CliCommandStrings.CannotCombineSearchStringAndVersion, WorkloadSearchCommandParser.WorkloadIdStubArgument.Name, command.Name)); - } - }); - - command.Validators.Add(result => - { - var versionArgument = result.GetValue(WorkloadVersionArgument); - if (versionArgument is not null && !versionArgument.All(v => v.Contains('@')) && !WorkloadSetVersion.IsWorkloadSetPackageVersion(versionArgument.SingleOrDefault(defaultValue: string.Empty))) - { - result.AddError(string.Format(CliStrings.UnrecognizedCommandOrArgument, string.Join(' ', versionArgument))); - } - }); + var command = WorkloadSearchVersionsCommandDefinition.Create(); command.SetAction(parseResult => new WorkloadSearchVersionsCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/Uninstall/WorkloadUninstallCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Uninstall/WorkloadUninstallCommandDefinition.cs new file mode 100644 index 000000000000..ba0ef4ef0eff --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Uninstall/WorkloadUninstallCommandDefinition.cs @@ -0,0 +1,24 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.CommandLine; +using Microsoft.DotNet.Cli.Commands.Workload.Install; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Uninstall; + +internal static class WorkloadUninstallCommandDefinition +{ + public static readonly Argument> WorkloadIdArgument = WorkloadInstallCommandParser.WorkloadIdArgument; + public static readonly Option VersionOption = InstallingWorkloadCommandParser.VersionOption; + public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + + public static Command Create() + { + Command command = new("uninstall", CliCommandStrings.WorkloadUninstallCommandDescription); + command.Arguments.Add(WorkloadIdArgument); + command.Options.Add(WorkloadInstallCommandParser.SkipSignCheckOption); + command.Options.Add(VerbosityOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Uninstall/WorkloadUninstallCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Uninstall/WorkloadUninstallCommandParser.cs index 3197537691a2..b621ec0a8d8a 100644 --- a/src/Cli/dotnet/Commands/Workload/Uninstall/WorkloadUninstallCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Uninstall/WorkloadUninstallCommandParser.cs @@ -8,9 +8,9 @@ namespace Microsoft.DotNet.Cli.Commands.Workload.Uninstall; internal static class WorkloadUninstallCommandParser { - public static readonly Argument> WorkloadIdArgument = WorkloadInstallCommandParser.WorkloadIdArgument; - public static readonly Option VersionOption = InstallingWorkloadCommandParser.VersionOption; - public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + public static readonly Argument> WorkloadIdArgument = WorkloadUninstallCommandDefinition.WorkloadIdArgument; + public static readonly Option VersionOption = WorkloadUninstallCommandDefinition.VersionOption; + public static readonly Option VerbosityOption = WorkloadUninstallCommandDefinition.VerbosityOption; private static readonly Command Command = ConstructCommand(); @@ -21,10 +21,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("uninstall", CliCommandStrings.WorkloadUninstallCommandDescription); - command.Arguments.Add(WorkloadIdArgument); - command.Options.Add(WorkloadInstallCommandParser.SkipSignCheckOption); - command.Options.Add(VerbosityOption); + Command command = WorkloadUninstallCommandDefinition.Create(); command.SetAction((parseResult) => new WorkloadUninstallCommand(parseResult).Execute()); diff --git a/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommandDefinition.cs b/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommandDefinition.cs new file mode 100644 index 000000000000..26932439db04 --- /dev/null +++ b/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommandDefinition.cs @@ -0,0 +1,61 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.CommandLine; +using Microsoft.DotNet.Cli.Commands.Workload.Install; + +namespace Microsoft.DotNet.Cli.Commands.Workload.Update; + +internal static class WorkloadUpdateCommandDefinition +{ + public static readonly Option TempDirOption = WorkloadInstallCommandParser.TempDirOption; + + public static readonly Option FromPreviousSdkOption = new("--from-previous-sdk") + { + Description = CliCommandStrings.FromPreviousSdkOptionDescription + }; + + public static readonly Option AdManifestOnlyOption = new("--advertising-manifests-only") + { + Description = CliCommandStrings.AdManifestOnlyOptionDescription, + Arity = ArgumentArity.Zero + }; + + public static readonly Option PrintRollbackOption = new("--print-rollback") + { + Hidden = true, + Arity = ArgumentArity.Zero + }; + + public static readonly Option FromHistoryOption = new("--from-history") + { + Description = CliCommandStrings.FromHistoryOptionDescription + }; + + public static readonly Option HistoryManifestOnlyOption = new("--manifests-only") + { + Description = CliCommandStrings.HistoryManifestOnlyOptionDescription + }; + + public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + + public static Command Create() + { + Command command = new("update", CliCommandStrings.WorkloadUpdateCommandDescription); + + InstallingWorkloadCommandParser.AddWorkloadInstallCommandOptions(command); + + command.Options.Add(TempDirOption); + command.Options.Add(FromPreviousSdkOption); + command.Options.Add(AdManifestOnlyOption); + command.Options.Add(InstallingWorkloadCommandParser.WorkloadSetVersionOption); + command.AddWorkloadCommandNuGetRestoreActionConfigOptions(); + command.Options.Add(VerbosityOption); + command.Options.Add(PrintRollbackOption); + command.Options.Add(WorkloadInstallCommandParser.SkipSignCheckOption); + command.Options.Add(FromHistoryOption); + command.Options.Add(HistoryManifestOnlyOption); + + return command; + } +} diff --git a/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommandParser.cs b/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommandParser.cs index 91522e862fa0..684937b29ec7 100644 --- a/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommandParser.cs +++ b/src/Cli/dotnet/Commands/Workload/Update/WorkloadUpdateCommandParser.cs @@ -8,36 +8,19 @@ namespace Microsoft.DotNet.Cli.Commands.Workload.Update; internal static class WorkloadUpdateCommandParser { - public static readonly Option TempDirOption = WorkloadInstallCommandParser.TempDirOption; + public static readonly Option TempDirOption = WorkloadUpdateCommandDefinition.TempDirOption; - public static readonly Option FromPreviousSdkOption = new("--from-previous-sdk") - { - Description = CliCommandStrings.FromPreviousSdkOptionDescription - }; + public static readonly Option FromPreviousSdkOption = WorkloadUpdateCommandDefinition.FromPreviousSdkOption; - public static readonly Option AdManifestOnlyOption = new("--advertising-manifests-only") - { - Description = CliCommandStrings.AdManifestOnlyOptionDescription, - Arity = ArgumentArity.Zero - }; + public static readonly Option AdManifestOnlyOption = WorkloadUpdateCommandDefinition.AdManifestOnlyOption; - public static readonly Option PrintRollbackOption = new("--print-rollback") - { - Hidden = true, - Arity = ArgumentArity.Zero - }; + public static readonly Option PrintRollbackOption = WorkloadUpdateCommandDefinition.PrintRollbackOption; - public static readonly Option FromHistoryOption = new("--from-history") - { - Description = CliCommandStrings.FromHistoryOptionDescription - }; + public static readonly Option FromHistoryOption = WorkloadUpdateCommandDefinition.FromHistoryOption; - public static readonly Option HistoryManifestOnlyOption = new("--manifests-only") - { - Description = CliCommandStrings.HistoryManifestOnlyOptionDescription - }; + public static readonly Option HistoryManifestOnlyOption = WorkloadUpdateCommandDefinition.HistoryManifestOnlyOption; - public static readonly Option VerbosityOption = CommonOptions.VerbosityOption(Utils.VerbosityOptions.normal); + public static readonly Option VerbosityOption = WorkloadUpdateCommandDefinition.VerbosityOption; private static readonly Command Command = ConstructCommand(); @@ -48,20 +31,7 @@ public static Command GetCommand() private static Command ConstructCommand() { - Command command = new("update", CliCommandStrings.WorkloadUpdateCommandDescription); - - InstallingWorkloadCommandParser.AddWorkloadInstallCommandOptions(command); - - command.Options.Add(TempDirOption); - command.Options.Add(FromPreviousSdkOption); - command.Options.Add(AdManifestOnlyOption); - command.Options.Add(InstallingWorkloadCommandParser.WorkloadSetVersionOption); - command.AddWorkloadCommandNuGetRestoreActionConfigOptions(); - command.Options.Add(VerbosityOption); - command.Options.Add(PrintRollbackOption); - command.Options.Add(WorkloadInstallCommandParser.SkipSignCheckOption); - command.Options.Add(FromHistoryOption); - command.Options.Add(HistoryManifestOnlyOption); + Command command = WorkloadUpdateCommandDefinition.Create(); command.SetAction((parseResult) => new WorkloadUpdateCommand(parseResult).Execute());