aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2017-10-31 17:06:07 -0700
committerAlexander Karatarakis <alkarata@microsoft.com>2017-10-31 17:31:10 -0700
commit7d0bcceaf028f28b0bc5ae666689f26d8de743a9 (patch)
treecead748e9fbc46b20f70a7f634fecc2aaf775c28 /toolsrc/src
parenteb7e1e481bbebc13d277d6a89f0a270767962286 (diff)
downloadvcpkg-7d0bcceaf028f28b0bc5ae666689f26d8de743a9.tar.gz
vcpkg-7d0bcceaf028f28b0bc5ae666689f26d8de743a9.zip
[findVSInstances] Data lines are now placed within <sol><eol> tags. Text outside these tags is ignored
This means we can print text in powershell now and it won't break vcpkg.
Diffstat (limited to 'toolsrc/src')
-rw-r--r--toolsrc/src/vcpkg/vcpkgpaths.cpp25
1 files changed, 22 insertions, 3 deletions
diff --git a/toolsrc/src/vcpkg/vcpkgpaths.cpp b/toolsrc/src/vcpkg/vcpkgpaths.cpp
index c6a92f813..8b9e6c598 100644
--- a/toolsrc/src/vcpkg/vcpkgpaths.cpp
+++ b/toolsrc/src/vcpkg/vcpkgpaths.cpp
@@ -320,6 +320,23 @@ namespace vcpkg
std::string major_version() const { return version.substr(0, 2); }
};
+ static std::vector<std::string> keep_data_lines(const std::string& data_blob)
+ {
+ static const std::regex DATA_LINE_REGEX(R"(<sol>::(.+?)(?=::<eol>))");
+
+ std::vector<std::string> data_lines;
+
+ const std::sregex_iterator it(data_blob.cbegin(), data_blob.cend(), DATA_LINE_REGEX);
+ const std::sregex_iterator end;
+ for (std::sregex_iterator i = it; i != end; ++i)
+ {
+ const std::smatch match = *i;
+ data_lines.push_back(match[1].str());
+ }
+
+ return data_lines;
+ }
+
static std::vector<VisualStudioInstance> get_visual_studio_instances(const VcpkgPaths& paths)
{
const fs::path script = paths.scripts / "findVisualStudioInstallationInstances.ps1";
@@ -327,9 +344,11 @@ namespace vcpkg
Checks::check_exit(
VCPKG_LINE_INFO, ec_data.exit_code == 0, "Could not run script to detect Visual Studio instances");
- const std::vector<std::string> instances_as_strings = Strings::split(ec_data.output, "::<eol>");
- Checks::check_exit(
- VCPKG_LINE_INFO, !instances_as_strings.empty(), "Could not detect any Visual Studio instances.\n");
+ const std::vector<std::string> instances_as_strings = keep_data_lines(ec_data.output);
+ Checks::check_exit(VCPKG_LINE_INFO,
+ !instances_as_strings.empty(),
+ "Could not detect any Visual Studio instances. Powershell returned: %s\n",
+ ec_data.output);
std::vector<VisualStudioInstance> output;
for (const std::string& instance_as_string : instances_as_strings)