if (vm.count("arg"))
args = vm["arg"].as<std::vector<std::string> >();
+ if (args.size() < command->GetMinArguments()) {
+ Log(LogCritical, "cli")
+ << "Too few arguments. Command needs at least " << command->GetMinArguments()
+ << " argument" << (command->GetMinArguments() != 1 ? "s" : "") << ".";
+ return EXIT_FAILURE;
+ }
+
+ if (command->GetMaxArguments() >= 0 && args.size() > command->GetMaxArguments()) {
+ Log(LogCritical, "cli")
+ << "Too many arguments. At most " << command->GetMaxArguments()
+ << " argument" << (command->GetMaxArguments() != 1 ? "s" : "") << " may be specified.";
+ return EXIT_FAILURE;
+ }
+
rc = command->Run(vm, args);
}
return "add agent";
}
+int AgentAddCommand::GetMinArguments(void) const
+{
+ return 1;
+}
+
/**
* The entry point for the "agent add" CLI command.
*
*/
int AgentAddCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (ap.empty()) {
- Log(LogCritical, "cli", "No agent name provided.");
- return 1;
- }
-
if (!AgentUtility::AddAgent(ap[0])) {
Log(LogCritical, "cli")
<< "Cannot add agent '" << ap[0] << "'.";
virtual String GetDescription(void) const;
virtual String GetShortDescription(void) const;
+ virtual int GetMinArguments(void) const;
virtual int Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const;
};
return AgentUtility::GetAgentCompletionSuggestions(word);
}
+int AgentRemoveCommand::GetMinArguments(void) const
+{
+ return 1;
+}
+
+int AgentRemoveCommand::GetMaxArguments(void) const
+{
+ return -1;
+}
+
/**
* The entry point for the "agent remove" CLI command.
*
*/
int AgentRemoveCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (ap.empty()) {
- Log(LogCritical, "cli", "No agent name provided.");
- return 1;
- }
-
bool failed = false;
BOOST_FOREACH(const String& agent, ap) {
virtual String GetDescription(void) const;
virtual String GetShortDescription(void) const;
+ virtual int GetMinArguments(void) const;
+ virtual int GetMaxArguments(void) const;
virtual std::vector<String> GetPositionalSuggestions(const String& word) const;
virtual int Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const;
};
}
+int AgentSetCommand::GetMinArguments(void) const
+{
+ return 1;
+}
+
/**
* The entry point for the "agent set" CLI command.
*
*/
int AgentSetCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (ap.empty()) {
- Log(LogCritical, "cli", "No agent name provided.");
- return 1;
- }
-
Log(LogWarning, "cli", "TODO: Not implemented yet.");
return 0;
virtual String GetDescription(void) const;
virtual String GetShortDescription(void) const;
+ virtual int GetMinArguments(void) const;
virtual void InitParameters(boost::program_options::options_description& visibleDesc,
boost::program_options::options_description& hiddenDesc) const;
virtual int Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const;
*/
int AgentUpdateConfigCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (!ap.empty()) {
- Log(LogWarning, "cli")
- << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
- }
-
Log(LogWarning, "cli", "TODO: Not implemented yet.");
return 0;
*/
int AgentWizardCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (!ap.empty()) {
- Log(LogWarning, "cli")
- << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
- }
-
Log(LogWarning, "cli", "TODO: Not implemented yet.");
/*
return result;
}
+int CLICommand::GetMinArguments(void) const
+{
+ return 0;
+}
+
+int CLICommand::GetMaxArguments(void) const
+{
+ return GetMinArguments();
+}
+
boost::mutex& CLICommand::GetRegistryMutex(void)
{
static boost::mutex mtx;
virtual String GetDescription(void) const = 0;
virtual String GetShortDescription(void) const = 0;
+ virtual int GetMinArguments(void) const;
+ virtual int GetMaxArguments(void) const;
virtual void InitParameters(boost::program_options::options_description& visibleDesc,
boost::program_options::options_description& hiddenDesc) const;
virtual int Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const = 0;
return FeatureUtility::GetFieldCompletionSuggestions(word, false);
}
+int FeatureDisableCommand::GetMinArguments(void) const
+{
+ return 1;
+}
+
+int FeatureDisableCommand::GetMaxArguments(void) const
+{
+ return -1;
+}
+
/**
* The entry point for the "feature disable" CLI command.
*
virtual String GetDescription(void) const;
virtual String GetShortDescription(void) const;
+ virtual int GetMinArguments(void) const;
+ virtual int GetMaxArguments(void) const;
virtual std::vector<String> GetPositionalSuggestions(const String& word) const;
virtual int Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const;
return FeatureUtility::GetFieldCompletionSuggestions(word, true);
}
+int FeatureEnableCommand::GetMinArguments(void) const
+{
+ return 1;
+}
+
+int FeatureEnableCommand::GetMaxArguments(void) const
+{
+ return -1;
+}
+
/**
* The entry point for the "feature enable" CLI command.
*
*/
int FeatureEnableCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (ap.empty()) {
- Log(LogCritical, "cli", "Cannot enable feature(s). Name(s) are missing!");
- return 0;
- }
-
return FeatureUtility::EnableFeatures(ap);
-
- return 0;
}
virtual String GetDescription(void) const;
virtual String GetShortDescription(void) const;
+ virtual int GetMinArguments(void) const;
+ virtual int GetMaxArguments(void) const;
virtual std::vector<String> GetPositionalSuggestions(const String& word) const;
virtual int Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const;
};
*/
int FeatureListCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (!ap.empty()) {
- Log(LogWarning, "cli")
- << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
- }
-
return FeatureUtility::ListFeatures();
}
*/
int ObjectListCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (!ap.empty()) {
- Log(LogWarning, "cli")
- << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
- }
-
String objectfile = Application::GetObjectsPath();
if (!Utility::PathExists(objectfile)) {
*/
int RepositoryCommitCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (!ap.empty()) {
- Log(LogWarning, "cli")
- << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
- }
-
if (vm.count("simulate")) {
RepositoryUtility::PrintChangeLog(std::cout);
std::cout << "Simulation not yet implemented.\n";
return CLICommand::GetPositionalSuggestions(word);
}
+int RepositoryObjectCommand::GetMaxArguments(void) const
+{
+ return -1;
+}
+
/**
* The entry point for the "repository <type> <add/remove/list>" CLI command.
*
*/
int RepositoryObjectCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
-
Dictionary::Ptr attrs = RepositoryUtility::GetArgumentAttributes(ap);
if (!attrs->Contains("name")) {
virtual String GetDescription(void) const;
virtual String GetShortDescription(void) const;
+ virtual int GetMaxArguments(void) const;
virtual void InitParameters(boost::program_options::options_description& visibleDesc,
boost::program_options::options_description& hiddenDesc) const;
virtual std::vector<String> GetPositionalSuggestions(const String& word) const;
("current", "Uses the current value (i.e. from the running process, rather than from the vars file)");
}
+int VariableGetCommand::GetMinArguments(void) const
+{
+ return 1;
+}
+
/**
* The entry point for the "variable get" CLI command.
*
*/
int VariableGetCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (ap.size() != 1) {
- Log(LogCritical, "cli", "Missing argument: variable name");
- return 1;
- }
-
if (vm.count("current")) {
std::cout << ScriptVariable::Get(ap[0], &Empty) << "\n";
return 0;
virtual String GetDescription(void) const;
virtual String GetShortDescription(void) const;
+ virtual int GetMinArguments(void) const;
void InitParameters(boost::program_options::options_description& visibleDesc,
boost::program_options::options_description& hiddenDesc) const;
virtual int Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const;
*/
int VariableListCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
{
- if (!ap.empty()) {
- Log(LogWarning, "cli")
- << "Ignoring parameters: " << boost::algorithm::join(ap, " ");
- }
-
String varsfile = Application::GetVarsPath();
if (!Utility::PathExists(varsfile)) {