From 30587111d362bc8c2e0b700549d0fe7d62b9193d Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Thu, 12 Jan 2017 17:04:32 -0800 Subject: Rename commands_installation to commands_install Names should match the command --- toolsrc/src/commands_install.cpp | 241 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 toolsrc/src/commands_install.cpp (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp new file mode 100644 index 000000000..f44852930 --- /dev/null +++ b/toolsrc/src/commands_install.cpp @@ -0,0 +1,241 @@ +#include "vcpkg_Commands.h" +#include "vcpkg.h" +#include "vcpkg_Environment.h" +#include "metrics.h" +#include "vcpkg_Files.h" +#include "vcpkg_System.h" +#include "vcpkg_Dependencies.h" +#include "vcpkg_Input.h" + +namespace vcpkg +{ + using Dependencies::package_spec_with_install_plan; + using Dependencies::install_plan_type; + + static void install_and_write_listfile(const vcpkg_paths& paths, const BinaryParagraph& bpgh) + { + std::vector output; + + const fs::path package_prefix_path = paths.package_dir(bpgh.spec); + const size_t prefix_length = package_prefix_path.native().size(); + + const triplet& target_triplet = bpgh.spec.target_triplet(); + const std::string& target_triplet_as_string = target_triplet.canonical_name(); + std::error_code ec; + fs::create_directory(paths.installed / target_triplet_as_string, ec); + output.push_back(Strings::format(R"(%s)", target_triplet_as_string)); + + for (auto it = fs::recursive_directory_iterator(package_prefix_path); it != fs::recursive_directory_iterator(); ++it) + { + const std::string filename = it->path().filename().generic_string(); + if (fs::is_regular_file(it->status()) && (_stricmp(filename.c_str(), "CONTROL") == 0 || _stricmp(filename.c_str(), "BUILD_INFO") == 0)) + { + // Do not copy the control file + continue; + } + + const std::string suffix = it->path().generic_u8string().substr(prefix_length + 1); + const fs::path target = paths.installed / target_triplet_as_string / suffix; + + auto status = it->status(ec); + if (ec) + { + System::println(System::color::error, "failed: %s: %s", it->path().u8string(), ec.message()); + continue; + } + + if (fs::is_directory(status)) + { + fs::create_directory(target, ec); + if (ec) + { + System::println(System::color::error, "failed: %s: %s", target.u8string(), ec.message()); + } + + // Trailing backslash for directories + output.push_back(Strings::format(R"(%s/%s)", target_triplet_as_string, suffix)); + continue; + } + + if (fs::is_regular_file(status)) + { + if (fs::exists(target)) + { + System::println(System::color::warning, "File %s was already present and will be overwritten", target.u8string(), ec.message()); + } + fs::copy_file(*it, target, fs::copy_options::overwrite_existing, ec); + if (ec) + { + System::println(System::color::error, "failed: %s: %s", target.u8string(), ec.message()); + } + output.push_back(Strings::format(R"(%s/%s)", target_triplet_as_string, suffix)); + continue; + } + + if (!fs::status_known(status)) + { + System::println(System::color::error, "failed: %s: unknown status", it->path().u8string()); + continue; + } + + System::println(System::color::error, "failed: %s: cannot handle file type", it->path().u8string()); + } + + Files::write_all_lines(paths.listfile_path(bpgh), output); + } + + static void remove_first_n_chars(std::vector* strings, const size_t n) + { + for (std::string& s : *strings) + { + s.erase(0, n); + } + }; + + static std::vector extract_files_in_triplet(const std::vector& pgh_and_files, const triplet& triplet) + { + std::vector output; + for (const StatusParagraph_and_associated_files& t : pgh_and_files) + { + if (t.pgh.package.spec.target_triplet() != triplet) + { + continue; + } + + output.insert(output.end(), t.files.cbegin(), t.files.cend()); + } + + std::sort(output.begin(), output.end()); + return output; + } + + static ImmutableSortedVector build_list_of_package_files(const fs::path& package_dir) + { + const std::vector package_file_paths = Files::recursive_find_all_files_in_dir(package_dir); + std::vector package_files; + const size_t package_remove_char_count = package_dir.generic_string().size() + 1; // +1 for the slash + std::transform(package_file_paths.cbegin(), package_file_paths.cend(), std::back_inserter(package_files), [package_remove_char_count](const fs::path& path) + { + std::string as_string = path.generic_string(); + as_string.erase(0, package_remove_char_count); + return std::move(as_string); + }); + + return ImmutableSortedVector::create(std::move(package_files)); + } + + static ImmutableSortedVector build_list_of_installed_files(const std::vector& pgh_and_files, const triplet& triplet) + { + std::vector installed_files = extract_files_in_triplet(pgh_and_files, triplet); + const size_t installed_remove_char_count = triplet.canonical_name().size() + 1; // +1 for the slash + remove_first_n_chars(&installed_files, installed_remove_char_count); + + return ImmutableSortedVector::create(std::move(installed_files)); + } + + void install_package(const vcpkg_paths& paths, const BinaryParagraph& binary_paragraph, StatusParagraphs& status_db) + { + const fs::path package_dir = paths.package_dir(binary_paragraph.spec); + const triplet& triplet = binary_paragraph.spec.target_triplet(); + const std::vector pgh_and_files = get_installed_files(paths, status_db); + + const ImmutableSortedVector package_files = build_list_of_package_files(package_dir); + const ImmutableSortedVector installed_files = build_list_of_installed_files(pgh_and_files, triplet); + + std::vector intersection; + std::set_intersection(package_files.cbegin(), package_files.cend(), + installed_files.cbegin(), installed_files.cend(), + std::back_inserter(intersection)); + + if (!intersection.empty()) + { + const fs::path triplet_install_path = paths.installed / triplet.canonical_name(); + System::println(System::color::error, "The following files are already installed in %s and are in conflict with %s", + triplet_install_path.generic_string(), + binary_paragraph.spec); + System::println(""); + for (const std::string& s : intersection) + { + System::println(" %s", s); + } + System::println(""); + exit(EXIT_FAILURE); + } + + StatusParagraph spgh; + spgh.package = binary_paragraph; + spgh.want = want_t::install; + spgh.state = install_state_t::half_installed; + for (auto&& dep : spgh.package.depends) + { + if (status_db.find_installed(dep, spgh.package.spec.target_triplet()) == status_db.end()) + { + Checks::unreachable(); + } + } + write_update(paths, spgh); + status_db.insert(std::make_unique(spgh)); + + install_and_write_listfile(paths, spgh.package); + + spgh.state = install_state_t::installed; + write_update(paths, spgh); + status_db.insert(std::make_unique(spgh)); + } + + void install_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet) + { + static const std::string example = create_example_string("install zlib zlib:x64-windows curl boost"); + args.check_min_arg_count(1, example); + StatusParagraphs status_db = database_load_check(paths); + + std::vector specs = Input::check_and_get_package_specs(args.command_arguments, default_target_triplet, example); + Input::check_triplets(specs, paths); + std::vector install_plan = Dependencies::create_install_plan(paths, specs, status_db); + Checks::check_exit(!install_plan.empty(), "Install plan cannot be empty"); + + std::string specs_string = to_string(install_plan[0].spec); + for (size_t i = 1; i < install_plan.size(); ++i) + { + specs_string.push_back(','); + specs_string.append(to_string(install_plan[i].spec)); + } + TrackProperty("installplan", specs_string); + Environment::ensure_utilities_on_path(paths); + + for (const package_spec_with_install_plan& action : install_plan) + { + try + { + if (action.plan.type == install_plan_type::ALREADY_INSTALLED) + { + if (std::find(specs.begin(), specs.end(), action.spec) != specs.end()) + { + System::println(System::color::success, "Package %s is already installed", action.spec); + } + } + else if (action.plan.type == install_plan_type::BUILD_AND_INSTALL) + { + Commands::details::build_internal(*action.plan.spgh, action.spec, paths, paths.port_dir(action.spec)); + const BinaryParagraph bpgh = try_load_cached_package(paths, action.spec).get_or_throw(); + install_package(paths, bpgh, status_db); + System::println(System::color::success, "Package %s is installed", action.spec); + } + else if (action.plan.type == install_plan_type::INSTALL) + { + install_package(paths, *action.plan.bpgh, status_db); + System::println(System::color::success, "Package %s is installed", action.spec); + } + else + Checks::unreachable(); + } + catch (const std::exception& e) + { + System::println(System::color::error, "Error: Could not install package %s: %s", action.spec, e.what()); + exit(EXIT_FAILURE); + } + } + + exit(EXIT_SUCCESS); + } +} -- cgit v1.2.3 From df2a05e8546281135c6ea12430734d74371bcf46 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Thu, 12 Jan 2017 17:35:33 -0800 Subject: Introduce Command namespace. Refactoring --- toolsrc/src/commands_install.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index f44852930..ff5ddb0e7 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -7,7 +7,7 @@ #include "vcpkg_Dependencies.h" #include "vcpkg_Input.h" -namespace vcpkg +namespace vcpkg::Commands { using Dependencies::package_spec_with_install_plan; using Dependencies::install_plan_type; @@ -185,7 +185,7 @@ namespace vcpkg void install_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet) { - static const std::string example = create_example_string("install zlib zlib:x64-windows curl boost"); + static const std::string example = Commands::Helpers::create_example_string("install zlib zlib:x64-windows curl boost"); args.check_min_arg_count(1, example); StatusParagraphs status_db = database_load_check(paths); @@ -216,7 +216,7 @@ namespace vcpkg } else if (action.plan.type == install_plan_type::BUILD_AND_INSTALL) { - Commands::details::build_internal(*action.plan.spgh, action.spec, paths, paths.port_dir(action.spec)); + Commands::build_internal(*action.plan.spgh, action.spec, paths, paths.port_dir(action.spec)); const BinaryParagraph bpgh = try_load_cached_package(paths, action.spec).get_or_throw(); install_package(paths, bpgh, status_db); System::println(System::color::success, "Package %s is installed", action.spec); -- cgit v1.2.3 From cc8851144a871931b93d84bd962364159ad1c424 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Thu, 12 Jan 2017 22:03:57 -0800 Subject: Reorganize commands, each in its own namespace Additionally, functions related to a command can now live in the same namespace --- toolsrc/src/commands_install.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index ff5ddb0e7..ff517d9b1 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -7,7 +7,7 @@ #include "vcpkg_Dependencies.h" #include "vcpkg_Input.h" -namespace vcpkg::Commands +namespace vcpkg::Commands::Install { using Dependencies::package_spec_with_install_plan; using Dependencies::install_plan_type; @@ -183,9 +183,9 @@ namespace vcpkg::Commands status_db.insert(std::make_unique(spgh)); } - void install_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet) + void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet) { - static const std::string example = Commands::Helpers::create_example_string("install zlib zlib:x64-windows curl boost"); + static const std::string example = Commands::Help::create_example_string("install zlib zlib:x64-windows curl boost"); args.check_min_arg_count(1, example); StatusParagraphs status_db = database_load_check(paths); @@ -216,7 +216,7 @@ namespace vcpkg::Commands } else if (action.plan.type == install_plan_type::BUILD_AND_INSTALL) { - Commands::build_internal(*action.plan.spgh, action.spec, paths, paths.port_dir(action.spec)); + Commands::Build::build_package(*action.plan.spgh, action.spec, paths, paths.port_dir(action.spec)); const BinaryParagraph bpgh = try_load_cached_package(paths, action.spec).get_or_throw(); install_package(paths, bpgh, status_db); System::println(System::color::success, "Package %s is installed", action.spec); -- cgit v1.2.3 From 59be40a100910d1f833cd54762e624b7123965ed Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Wed, 25 Jan 2017 19:32:50 -0800 Subject: Rename vcpkg.h/cpp to vcpkglib.h/cpp --- toolsrc/src/commands_install.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index ff517d9b1..6fc0e32f0 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -1,5 +1,5 @@ #include "vcpkg_Commands.h" -#include "vcpkg.h" +#include "vcpkglib.h" #include "vcpkg_Environment.h" #include "metrics.h" #include "vcpkg_Files.h" -- cgit v1.2.3 From 5d2f44859248f1ef32d4c79b6b22eec95b18db1a Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Fri, 27 Jan 2017 13:01:22 -0800 Subject: Use Strings::join() --- toolsrc/src/commands_install.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index 6fc0e32f0..a8ddf35f4 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -153,12 +153,7 @@ namespace vcpkg::Commands::Install System::println(System::color::error, "The following files are already installed in %s and are in conflict with %s", triplet_install_path.generic_string(), binary_paragraph.spec); - System::println(""); - for (const std::string& s : intersection) - { - System::println(" %s", s); - } - System::println(""); + Strings::join(intersection, "\n "); exit(EXIT_FAILURE); } -- cgit v1.2.3 From a26c0288931f7fba284ef9bea5e7cbc655e127ba Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Mon, 30 Jan 2017 19:37:07 -0800 Subject: [vcpkg] Fixup 5d2f4485 --- toolsrc/src/commands_install.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index a8ddf35f4..69495bd62 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -153,7 +153,9 @@ namespace vcpkg::Commands::Install System::println(System::color::error, "The following files are already installed in %s and are in conflict with %s", triplet_install_path.generic_string(), binary_paragraph.spec); - Strings::join(intersection, "\n "); + System::print("\n "); + System::println(Strings::join(intersection, "\n ")); + System::println(""); exit(EXIT_FAILURE); } -- cgit v1.2.3 From 050e4a0f7a8156bd862f95c06ea298ab6697e147 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Fri, 27 Jan 2017 12:49:09 -0800 Subject: Introduce precompiled headers --- toolsrc/src/commands_install.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index 69495bd62..2ae67a497 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -1,3 +1,4 @@ +#include "pch.h" #include "vcpkg_Commands.h" #include "vcpkglib.h" #include "vcpkg_Environment.h" -- cgit v1.2.3 From 4059d4a6b9f9467ff5c58594f7304eef7ba79664 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Fri, 27 Jan 2017 17:28:00 -0800 Subject: [package_spec] Make toString() a member function --- toolsrc/src/commands_install.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index 2ae67a497..dabce44f6 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -192,11 +192,11 @@ namespace vcpkg::Commands::Install std::vector install_plan = Dependencies::create_install_plan(paths, specs, status_db); Checks::check_exit(!install_plan.empty(), "Install plan cannot be empty"); - std::string specs_string = to_string(install_plan[0].spec); + std::string specs_string = install_plan[0].spec.toString(); for (size_t i = 1; i < install_plan.size(); ++i) { specs_string.push_back(','); - specs_string.append(to_string(install_plan[i].spec)); + specs_string.append(install_plan[i].spec.toString()); } TrackProperty("installplan", specs_string); Environment::ensure_utilities_on_path(paths); -- cgit v1.2.3 From 884cd176b05a76e7fbba924685a0d71c3dea0f9b Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Mon, 30 Jan 2017 12:36:27 -0800 Subject: Renames and formatting --- toolsrc/src/commands_install.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index dabce44f6..e5c5dd013 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -214,14 +214,14 @@ namespace vcpkg::Commands::Install } else if (action.plan.type == install_plan_type::BUILD_AND_INSTALL) { - Commands::Build::build_package(*action.plan.spgh, action.spec, paths, paths.port_dir(action.spec)); + Commands::Build::build_package(*action.plan.source_pgh, action.spec, paths, paths.port_dir(action.spec)); const BinaryParagraph bpgh = try_load_cached_package(paths, action.spec).get_or_throw(); install_package(paths, bpgh, status_db); System::println(System::color::success, "Package %s is installed", action.spec); } else if (action.plan.type == install_plan_type::INSTALL) { - install_package(paths, *action.plan.bpgh, status_db); + install_package(paths, *action.plan.binary_pgh, status_db); System::println(System::color::success, "Package %s is installed", action.spec); } else -- cgit v1.2.3 From b4e9322a11aa2d0d9b0f1c0f960d921ce51e1c0f Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Mon, 30 Jan 2017 13:58:58 -0800 Subject: Rename field --- toolsrc/src/commands_install.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index e5c5dd013..0371cc6e5 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -205,21 +205,21 @@ namespace vcpkg::Commands::Install { try { - if (action.plan.type == install_plan_type::ALREADY_INSTALLED) + if (action.plan.plan_type == install_plan_type::ALREADY_INSTALLED) { if (std::find(specs.begin(), specs.end(), action.spec) != specs.end()) { System::println(System::color::success, "Package %s is already installed", action.spec); } } - else if (action.plan.type == install_plan_type::BUILD_AND_INSTALL) + else if (action.plan.plan_type == install_plan_type::BUILD_AND_INSTALL) { Commands::Build::build_package(*action.plan.source_pgh, action.spec, paths, paths.port_dir(action.spec)); const BinaryParagraph bpgh = try_load_cached_package(paths, action.spec).get_or_throw(); install_package(paths, bpgh, status_db); System::println(System::color::success, "Package %s is installed", action.spec); } - else if (action.plan.type == install_plan_type::INSTALL) + else if (action.plan.plan_type == install_plan_type::INSTALL) { install_package(paths, *action.plan.binary_pgh, status_db); System::println(System::color::success, "Package %s is installed", action.spec); -- cgit v1.2.3 From 86a5ab7bccce5988682e69c4e1c14fedbf9a13a7 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Mon, 30 Jan 2017 16:40:09 -0800 Subject: Use pointer instead of reference for out param --- toolsrc/src/commands_install.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index 0371cc6e5..439424d28 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -134,11 +134,11 @@ namespace vcpkg::Commands::Install return ImmutableSortedVector::create(std::move(installed_files)); } - void install_package(const vcpkg_paths& paths, const BinaryParagraph& binary_paragraph, StatusParagraphs& status_db) + void install_package(const vcpkg_paths& paths, const BinaryParagraph& binary_paragraph, StatusParagraphs* status_db) { const fs::path package_dir = paths.package_dir(binary_paragraph.spec); const triplet& triplet = binary_paragraph.spec.target_triplet(); - const std::vector pgh_and_files = get_installed_files(paths, status_db); + const std::vector pgh_and_files = get_installed_files(paths, *status_db); const ImmutableSortedVector package_files = build_list_of_package_files(package_dir); const ImmutableSortedVector installed_files = build_list_of_installed_files(pgh_and_files, triplet); @@ -166,19 +166,19 @@ namespace vcpkg::Commands::Install spgh.state = install_state_t::half_installed; for (auto&& dep : spgh.package.depends) { - if (status_db.find_installed(dep, spgh.package.spec.target_triplet()) == status_db.end()) + if (status_db->find_installed(dep, spgh.package.spec.target_triplet()) == status_db->end()) { Checks::unreachable(); } } write_update(paths, spgh); - status_db.insert(std::make_unique(spgh)); + status_db->insert(std::make_unique(spgh)); install_and_write_listfile(paths, spgh.package); spgh.state = install_state_t::installed; write_update(paths, spgh); - status_db.insert(std::make_unique(spgh)); + status_db->insert(std::make_unique(spgh)); } void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths, const triplet& default_target_triplet) @@ -216,12 +216,12 @@ namespace vcpkg::Commands::Install { Commands::Build::build_package(*action.plan.source_pgh, action.spec, paths, paths.port_dir(action.spec)); const BinaryParagraph bpgh = try_load_cached_package(paths, action.spec).get_or_throw(); - install_package(paths, bpgh, status_db); + install_package(paths, bpgh, &status_db); System::println(System::color::success, "Package %s is installed", action.spec); } else if (action.plan.plan_type == install_plan_type::INSTALL) { - install_package(paths, *action.plan.binary_pgh, status_db); + install_package(paths, *action.plan.binary_pgh, &status_db); System::println(System::color::success, "Package %s is installed", action.spec); } else -- cgit v1.2.3 From e6e325b1cd92bf0b1aa05c84a2a757713f17fa08 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Mon, 30 Jan 2017 22:10:08 -0800 Subject: Fix usage of Strings::Joiner --- toolsrc/src/commands_install.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'toolsrc/src/commands_install.cpp') diff --git a/toolsrc/src/commands_install.cpp b/toolsrc/src/commands_install.cpp index 439424d28..1f5a2234d 100644 --- a/toolsrc/src/commands_install.cpp +++ b/toolsrc/src/commands_install.cpp @@ -155,7 +155,7 @@ namespace vcpkg::Commands::Install triplet_install_path.generic_string(), binary_paragraph.spec); System::print("\n "); - System::println(Strings::join(intersection, "\n ")); + System::println(Strings::Joiner::on("\n ").join(intersection)); System::println(""); exit(EXIT_FAILURE); } -- cgit v1.2.3