winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }