ConfigureCommand.cpp (5003B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "ConfigureCommand.h" 5 #include "ConfigureListCommand.h" 6 #include "ConfigureShowCommand.h" 7 #include "ConfigureTestCommand.h" 8 #include "ConfigureValidateCommand.h" 9 #include "ConfigureExportCommand.h" 10 #include "Workflows/ConfigurationFlow.h" 11 #include "Workflows/MSStoreInstallerHandler.h" 12 #include "ConfigurationCommon.h" 13 14 using namespace AppInstaller::CLI::Workflow; 15 16 namespace AppInstaller::CLI 17 { 18 ConfigureCommand::ConfigureCommand(std::string_view parent) : 19 Command("configure", { "configuration", "dsc"}, parent, Settings::TogglePolicy::Policy::Configuration) 20 { 21 SelectCurrentCommandIfUnrecognizedSubcommandFound(true); 22 } 23 24 std::vector<std::unique_ptr<Command>> ConfigureCommand::GetCommands() const 25 { 26 return InitializeFromMoveOnly<std::vector<std::unique_ptr<Command>>>({ 27 std::make_unique<ConfigureShowCommand>(FullName()), 28 std::make_unique<ConfigureListCommand>(FullName()), 29 std::make_unique<ConfigureTestCommand>(FullName()), 30 std::make_unique<ConfigureValidateCommand>(FullName()), 31 std::make_unique<ConfigureExportCommand>(FullName()), 32 }); 33 } 34 35 std::vector<Argument> ConfigureCommand::GetArguments() const 36 { 37 return { 38 Argument{ Execution::Args::Type::ConfigurationFile, Resource::String::ConfigurationFileArgumentDescription, ArgumentType::Positional }, 39 Argument{ Execution::Args::Type::ConfigurationModulePath, Resource::String::ConfigurationModulePath, ArgumentType::Positional }, 40 Argument{ Execution::Args::Type::ConfigurationProcessorPath, Resource::String::ConfigurationProcessorPath, ArgumentType::Standard, Argument::Visibility::Help }, 41 Argument{ Execution::Args::Type::ConfigurationHistoryItem, Resource::String::ConfigurationHistoryItemArgumentDescription, ArgumentType::Standard, Argument::Visibility::Help }, 42 Argument{ Execution::Args::Type::ConfigurationAcceptWarning, Resource::String::ConfigurationAcceptWarningArgumentDescription, ArgumentType::Flag }, 43 Argument{ Execution::Args::Type::ConfigurationSuppressPrologue, Resource::String::ConfigurationSuppressPrologueArgumentDescription, ArgumentType::Flag, Argument::Visibility::Help }, 44 Argument{ Execution::Args::Type::ExtendedFeaturesEnable, Resource::String::ExtendedFeaturesEnableMessage, ArgumentType::Flag, Argument::Visibility::Help }, 45 Argument{ Execution::Args::Type::ExtendedFeaturesDisable, Resource::String::ExtendedFeaturesDisableMessage, ArgumentType::Flag, Argument::Visibility::Help }, 46 }; 47 } 48 49 Resource::LocString ConfigureCommand::ShortDescription() const 50 { 51 return { Resource::String::ConfigureCommandShortDescription }; 52 } 53 54 Resource::LocString ConfigureCommand::LongDescription() const 55 { 56 return { Resource::String::ConfigureCommandLongDescription }; 57 } 58 59 Utility::LocIndView ConfigureCommand::HelpLink() const 60 { 61 return "https://aka.ms/winget-command-configure"_liv; 62 } 63 64 void ConfigureCommand::ExecuteInternal(Execution::Context& context) const 65 { 66 if (context.Args.Contains(Execution::Args::Type::ExtendedFeaturesEnable)) 67 { 68 context << 69 EnableExtendedFeatures; 70 } 71 else if (context.Args.Contains(Execution::Args::Type::ExtendedFeaturesDisable)) 72 { 73 context << 74 DisableExtendedFeatures; 75 } 76 else 77 { 78 context << 79 VerifyIsFullPackage << 80 VerifyFileOrUri(Execution::Args::Type::ConfigurationFile) << 81 CreateConfigurationProcessorWithoutFactory << 82 OpenConfigurationSet << 83 CreateConfigurationProcessor << 84 ShowConfigurationSet << 85 ShowConfigurationSetConflicts << 86 ConfirmConfigurationProcessing(true) << 87 ApplyConfigurationSet; 88 } 89 } 90 91 void ConfigureCommand::ValidateArgumentsInternal(Execution::Args& execArgs) const 92 { 93 if (execArgs.Contains(Execution::Args::Type::ExtendedFeaturesEnable) || 94 execArgs.Contains(Execution::Args::Type::ExtendedFeaturesDisable)) 95 { 96 if (execArgs.GetArgsCount() > 1) 97 { 98 throw CommandException(Resource::String::ExtendedFeaturesEnableArgumentError); 99 } 100 } 101 else 102 { 103 Configuration::ValidateCommonArguments(execArgs, true); 104 } 105 } 106 107 void ConfigureCommand::Complete(Execution::Context& context, Execution::Args::Type argType) const 108 { 109 if (argType == Execution::Args::Type::ConfigurationHistoryItem) 110 { 111 context << CompleteConfigurationHistoryItem; 112 } 113 } 114 }