From 3f5275ed9f2d6af085c0921aaa4ac58d10b0a23a Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Fri, 30 Sep 2016 16:29:12 -0700 Subject: Add function check_and_get_package_spec() and variant for multiple specs --- toolsrc/include/vcpkg_cmd_arguments.h | 4 +++- toolsrc/src/vcpkg_cmd_arguments.cpp | 33 ++++++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/toolsrc/include/vcpkg_cmd_arguments.h b/toolsrc/include/vcpkg_cmd_arguments.h index fdb3b1045..74db5e21e 100644 --- a/toolsrc/include/vcpkg_cmd_arguments.h +++ b/toolsrc/include/vcpkg_cmd_arguments.h @@ -13,9 +13,11 @@ namespace vcpkg struct vcpkg_cmd_arguments { static vcpkg_cmd_arguments create_from_command_line(const int argc, const wchar_t* const* const argv); - static vcpkg_cmd_arguments create_from_arg_sequence(const std::string* arg_begin, const std::string* arg_end); + static package_spec check_and_get_package_spec(const std::string& package_spec_as_string, const triplet& default_target_triplet, const char* example_text); + static std::vector check_and_get_package_specs(const std::vector& package_specs_as_strings, const triplet& default_target_triplet, const char* example_text); + std::unique_ptr vcpkg_root_dir; std::unique_ptr target_triplet; opt_bool debug = opt_bool::unspecified; diff --git a/toolsrc/src/vcpkg_cmd_arguments.cpp b/toolsrc/src/vcpkg_cmd_arguments.cpp index 062da4b02..302ff4a7e 100644 --- a/toolsrc/src/vcpkg_cmd_arguments.cpp +++ b/toolsrc/src/vcpkg_cmd_arguments.cpp @@ -50,6 +50,30 @@ namespace vcpkg option_field = new_setting; } + package_spec vcpkg_cmd_arguments::check_and_get_package_spec(const std::string& package_spec_as_string, const triplet& default_target_triplet, const char* example_text) + { + expected expected_spec = package_spec::from_string(package_spec_as_string, default_target_triplet); + if (auto spec = expected_spec.get()) + { + return *spec; + } + + System::println(System::color::error, "Error: %s: %s", expected_spec.error_code().message(), package_spec_as_string); + System::print(example_text); + exit(EXIT_FAILURE); + } + + std::vector vcpkg_cmd_arguments::check_and_get_package_specs(const std::vector& package_specs_as_strings, const triplet& default_target_triplet, const char* example_text) + { + std::vector specs; + for (const std::string& spec : package_specs_as_strings) + { + specs.push_back(check_and_get_package_spec(spec, default_target_triplet, example_text)); + } + + return specs; + } + vcpkg_cmd_arguments vcpkg_cmd_arguments::create_from_command_line(const int argc, const wchar_t* const* const argv) { std::vector v; @@ -217,15 +241,6 @@ namespace vcpkg std::vector vcpkg_cmd_arguments::parse_all_arguments_as_package_specs(const triplet& default_target_triplet, const char* example_text) const { size_t arg_count = command_arguments.size(); - if (arg_count < 1) - { - System::println(System::color::error, "Error: %s requires one or more package specifiers", this->command); - if (example_text == nullptr) - print_example(Strings::format("%s zlib zlib:x64-windows curl boost", this->command).c_str()); - else - print_example(example_text); - exit(EXIT_FAILURE); - } std::vector specs; specs.reserve(arg_count); -- cgit v1.2.3