diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2017-10-31 17:06:07 -0700 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2017-10-31 17:31:10 -0700 |
| commit | 7d0bcceaf028f28b0bc5ae666689f26d8de743a9 (patch) | |
| tree | cead748e9fbc46b20f70a7f634fecc2aaf775c28 /toolsrc/src | |
| parent | eb7e1e481bbebc13d277d6a89f0a270767962286 (diff) | |
| download | vcpkg-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.cpp | 25 |
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) |
