aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg_Input.cpp
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-06-19 15:09:54 -0700
committerRobert Schumacher <roschuma@microsoft.com>2017-06-19 15:09:54 -0700
commit34c08e2b15777c86c5aaacfee5f04eed986c62da (patch)
tree5a65eed065343bcb2f999da6937d423fff00c93e /toolsrc/src/vcpkg_Input.cpp
parent8d955c83b53d42983ebd9a046a0a0a5ade08537f (diff)
parentbca0988023a8c7bfc896d0f5787eb02e74c6fb59 (diff)
downloadvcpkg-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.cpp34
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);
+ }
}