diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2017-06-19 15:09:54 -0700 |
|---|---|---|
| committer | Robert Schumacher <roschuma@microsoft.com> | 2017-06-19 15:09:54 -0700 |
| commit | 34c08e2b15777c86c5aaacfee5f04eed986c62da (patch) | |
| tree | 5a65eed065343bcb2f999da6937d423fff00c93e /toolsrc/src/vcpkg_Input.cpp | |
| parent | 8d955c83b53d42983ebd9a046a0a0a5ade08537f (diff) | |
| parent | bca0988023a8c7bfc896d0f5787eb02e74c6fb59 (diff) | |
| download | vcpkg-34c08e2b15777c86c5aaacfee5f04eed986c62da.tar.gz vcpkg-34c08e2b15777c86c5aaacfee5f04eed986c62da.zip | |
Merge branch 'feature_package_implementation'
Diffstat (limited to 'toolsrc/src/vcpkg_Input.cpp')
| -rw-r--r-- | toolsrc/src/vcpkg_Input.cpp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/toolsrc/src/vcpkg_Input.cpp b/toolsrc/src/vcpkg_Input.cpp index df738315b..fdedd5507 100644 --- a/toolsrc/src/vcpkg_Input.cpp +++ b/toolsrc/src/vcpkg_Input.cpp @@ -15,7 +15,7 @@ namespace vcpkg::Input auto expected_spec = PackageSpec::from_string(as_lowercase, default_triplet); if (auto spec = expected_spec.get()) { - return *spec; + return PackageSpec{*spec}; } // Intentionally show the lowercased string @@ -34,4 +34,36 @@ namespace vcpkg::Input Checks::exit_fail(VCPKG_LINE_INFO); } } + + FullPackageSpec check_and_get_full_package_spec(const std::string& full_package_spec_as_string, + const Triplet& default_triplet, + CStringView example_text) + { + int left_pos = (int)full_package_spec_as_string.find('['); + if (left_pos == std::string::npos) + { + return FullPackageSpec{ + check_and_get_package_spec(full_package_spec_as_string, default_triplet, example_text)}; + } + int right_pos = (int)full_package_spec_as_string.find(']'); + if (left_pos >= right_pos) + { + System::println(System::Color::error, "Error: Argument is not formatted correctly \"%s\""); + Checks::exit_fail(VCPKG_LINE_INFO); + } + + std::string package_spec_as_string = full_package_spec_as_string.substr(0, left_pos); + const std::string as_lowercase = Strings::ascii_to_lowercase(package_spec_as_string); + auto expected_spec = PackageSpec::from_string(as_lowercase, default_triplet); + if (auto&& spec = expected_spec.get()) + { + return {*spec, + parse_comma_list(full_package_spec_as_string.substr(left_pos + 1, right_pos - left_pos - 1))}; + } + + // Intentionally show the lowercased string + System::println(System::Color::error, "Error: %s: %s", vcpkg::to_string(expected_spec.error()), as_lowercase); + System::print(example_text); + Checks::exit_fail(VCPKG_LINE_INFO); + } } |
