aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2016-09-30 11:24:04 -0700
committerAlexander Karatarakis <alkarata@microsoft.com>2016-09-30 11:29:01 -0700
commitfc1e55173b23afeb46142e6d656043a4b6f4b21c (patch)
tree6018e7a5a4866d91ca870708f067750570820566
parent0fdd57983a6ea25324df861d96c1c45136160338 (diff)
downloadvcpkg-fc1e55173b23afeb46142e6d656043a4b6f4b21c.tar.gz
vcpkg-fc1e55173b23afeb46142e6d656043a4b6f4b21c.zip
Rename check_max_args to check_max_arg_count and introduce min/exact variants
-rw-r--r--toolsrc/include/vcpkg_cmd_arguments.h8
-rw-r--r--toolsrc/src/commands_cache.cpp2
-rw-r--r--toolsrc/src/commands_create.cpp2
-rw-r--r--toolsrc/src/commands_edit.cpp4
-rw-r--r--toolsrc/src/commands_help.cpp4
-rw-r--r--toolsrc/src/commands_installation.cpp2
-rw-r--r--toolsrc/src/commands_list.cpp2
-rw-r--r--toolsrc/src/commands_owns.cpp2
-rw-r--r--toolsrc/src/commands_search.cpp2
-rw-r--r--toolsrc/src/vcpkg_cmd_arguments.cpp49
10 files changed, 59 insertions, 18 deletions
diff --git a/toolsrc/include/vcpkg_cmd_arguments.h b/toolsrc/include/vcpkg_cmd_arguments.h
index 7df3d64b1..fdb3b1045 100644
--- a/toolsrc/include/vcpkg_cmd_arguments.h
+++ b/toolsrc/include/vcpkg_cmd_arguments.h
@@ -26,7 +26,13 @@ namespace vcpkg
std::vector<std::string> command_arguments;
std::unordered_set<std::string> check_and_get_optional_command_arguments(const std::vector<std::string>& valid_options) const;
- void check_max_args(size_t arg_count, const char* example_text = nullptr) const;
+ void check_max_arg_count(const size_t expected_arg_count) const;
+ void check_max_arg_count(const size_t expected_arg_count, const char* example_text) const;
+ void check_min_arg_count(const size_t expected_arg_count) const;
+ void check_min_arg_count(const size_t expected_arg_count, const char* example_text) const;
+ void check_exact_arg_count(const size_t expected_arg_count) const;
+ void check_exact_arg_count(const size_t expected_arg_count, const char* example_text) const;
+
std::vector<package_spec> parse_all_arguments_as_package_specs(const triplet& default_target_triplet, const char* example_text = nullptr) const;
private:
diff --git a/toolsrc/src/commands_cache.cpp b/toolsrc/src/commands_cache.cpp
index 3a08c4a64..0d70f0f29 100644
--- a/toolsrc/src/commands_cache.cpp
+++ b/toolsrc/src/commands_cache.cpp
@@ -7,7 +7,7 @@ namespace vcpkg
{
void cache_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- args.check_max_args(0);
+ args.check_exact_arg_count(0);
auto begin_it = fs::directory_iterator(paths.packages);
auto end_it = fs::directory_iterator();
diff --git a/toolsrc/src/commands_create.cpp b/toolsrc/src/commands_create.cpp
index 85b98d667..2292581ee 100644
--- a/toolsrc/src/commands_create.cpp
+++ b/toolsrc/src/commands_create.cpp
@@ -7,7 +7,7 @@ namespace vcpkg
{
void create_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
{
- args.check_max_args(3);
+ args.check_max_arg_count(3);
if (args.command_arguments.size() < 2)
{
System::println(System::color::error, "Error: create requires the archive's URL as the second argument.");
diff --git a/toolsrc/src/commands_edit.cpp b/toolsrc/src/commands_edit.cpp
index fe02bfa26..09de37545 100644
--- a/toolsrc/src/commands_edit.cpp
+++ b/toolsrc/src/commands_edit.cpp
@@ -5,8 +5,8 @@ namespace vcpkg
{
void edit_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet)
{
- static auto example = "edit zlib";
- args.check_max_args(1, example);
+ static auto example = create_example_string("edit zlib").c_str();
+ args.check_max_arg_count(1, example);
package_spec spec = args.parse_all_arguments_as_package_specs(default_target_triplet, example).at(0);
// Find editor
diff --git a/toolsrc/src/commands_help.cpp b/toolsrc/src/commands_help.cpp
index 4e1ae9c49..69aabd9cc 100644
--- a/toolsrc/src/commands_help.cpp
+++ b/toolsrc/src/commands_help.cpp
@@ -6,7 +6,7 @@ namespace vcpkg
{
void version_command(const vcpkg_cmd_arguments& args)
{
- args.check_max_args(0);
+ args.check_max_arg_count(0);
System::println("Vcpkg package management program version %s\n"
"\n"
"Vcpkg is provided \"as-is\" without warranty of any kind, express or implied.\n"
@@ -17,7 +17,7 @@ namespace vcpkg
void help_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- args.check_max_args(1);
+ args.check_max_arg_count(1);
if (args.command_arguments.empty())
{
print_usage();
diff --git a/toolsrc/src/commands_installation.cpp b/toolsrc/src/commands_installation.cpp
index 2890184fb..6604685c0 100644
--- a/toolsrc/src/commands_installation.cpp
+++ b/toolsrc/src/commands_installation.cpp
@@ -122,7 +122,7 @@ namespace vcpkg
{
// Installing multiple packages leads to unintuitive behavior if one of them depends on another.
// Allowing only 1 package for now.
- args.check_max_args(1);
+ args.check_max_arg_count(1);
StatusParagraphs status_db = database_load_check(paths);
diff --git a/toolsrc/src/commands_list.cpp b/toolsrc/src/commands_list.cpp
index 2969ea953..ad34e76bf 100644
--- a/toolsrc/src/commands_list.cpp
+++ b/toolsrc/src/commands_list.cpp
@@ -6,7 +6,7 @@ namespace vcpkg
{
void list_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- args.check_max_args(0);
+ args.check_max_arg_count(0);
std::vector<std::string> packages_output;
for (auto&& pgh : database_load_check(paths))
diff --git a/toolsrc/src/commands_owns.cpp b/toolsrc/src/commands_owns.cpp
index 19c0a8dc6..36e853a58 100644
--- a/toolsrc/src/commands_owns.cpp
+++ b/toolsrc/src/commands_owns.cpp
@@ -6,7 +6,7 @@ namespace vcpkg
{
void owns_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- args.check_max_args(1);
+ args.check_max_arg_count(1);
if (args.command_arguments.size() == 0)
{
System::println(System::color::error, "Error: owns requires a pattern to search for as the first argument.");
diff --git a/toolsrc/src/commands_search.cpp b/toolsrc/src/commands_search.cpp
index ce02e9c3b..3cd6d2ff7 100644
--- a/toolsrc/src/commands_search.cpp
+++ b/toolsrc/src/commands_search.cpp
@@ -38,7 +38,7 @@ namespace vcpkg
void search_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
{
- args.check_max_args(1);
+ args.check_max_arg_count(1);
if (args.command_arguments.size() == 0)
{
do_print(paths, [](std::string&) -> bool
diff --git a/toolsrc/src/vcpkg_cmd_arguments.cpp b/toolsrc/src/vcpkg_cmd_arguments.cpp
index ec6946b98..dd8b41a72 100644
--- a/toolsrc/src/vcpkg_cmd_arguments.cpp
+++ b/toolsrc/src/vcpkg_cmd_arguments.cpp
@@ -166,15 +166,50 @@ namespace vcpkg
return output;
}
- void vcpkg_cmd_arguments::check_max_args(size_t arg_count, const char* example_text) const
+ void vcpkg_cmd_arguments::check_max_arg_count(const size_t expected_arg_count) const
{
- if (command_arguments.size() > arg_count)
+ return check_max_arg_count(expected_arg_count, "");
+ }
+
+ void vcpkg_cmd_arguments::check_min_arg_count(const size_t expected_arg_count) const
+ {
+ return check_min_arg_count(expected_arg_count, "");
+ }
+
+ void vcpkg_cmd_arguments::check_exact_arg_count(const size_t expected_arg_count) const
+ {
+ return check_exact_arg_count(expected_arg_count, "");
+ }
+
+ void vcpkg_cmd_arguments::check_max_arg_count(const size_t expected_arg_count, const char* example_text) const
+ {
+ const size_t actual_arg_count = command_arguments.size();
+ if (actual_arg_count > expected_arg_count)
{
- System::println(System::color::error, "Error: too many arguments to command %s", command);
- if (example_text != nullptr)
- print_example(example_text);
- else
- print_usage();
+ System::println(System::color::error, "Error: %s requires at most %u arguments, but %u were provided", this->command, expected_arg_count, actual_arg_count);
+ System::print(example_text);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ void vcpkg_cmd_arguments::check_min_arg_count(const size_t expected_arg_count, const char* example_text) const
+ {
+ const size_t actual_arg_count = command_arguments.size();
+ if (actual_arg_count < expected_arg_count)
+ {
+ System::println(System::color::error, "Error: %s requires at least %u arguments, but %u were provided", this->command, expected_arg_count, actual_arg_count);
+ System::print(example_text);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ void vcpkg_cmd_arguments::check_exact_arg_count(const size_t expected_arg_count, const char* example_text) const
+ {
+ const size_t actual_arg_count = command_arguments.size();
+ if (actual_arg_count != expected_arg_count)
+ {
+ System::println(System::color::error, "Error: %s requires %u arguments, but %u were provided", this->command, expected_arg_count, actual_arg_count);
+ System::print(example_text);
exit(EXIT_FAILURE);
}
}