void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths) { const ParsedArguments options = args.parse_arguments(COMMAND_STRUCTURE); auto source_control_files = Paragraphs::load_all_ports(paths.get_filesystem(), paths.ports); if (args.command_arguments.size() == 1) { const std::string filter = args.command_arguments.at(0); Util::erase_remove_if(source_control_files, [&](const std::unique_ptr<SourceControlFile>& source_control_file) { const SourceParagraph& source_paragraph = *source_control_file->core_paragraph; if (Strings::case_insensitive_ascii_contains(source_paragraph.name, filter)) { return false; } for (const Dependency& dependency : source_paragraph.depends) { if (Strings::case_insensitive_ascii_contains(dependency.name(), filter)) { return false; } } return true; }); } if (!options.switches.empty()) { const std::string graph_as_string = create_graph_as_string(options.switches, source_control_files); System::println(graph_as_string); Checks::exit_success(VCPKG_LINE_INFO); } for (auto&& source_control_file : source_control_files) { const SourceParagraph& source_paragraph = *source_control_file->core_paragraph; const auto s = Strings::join(", ", source_paragraph.depends, [](const Dependency& d) { return d.name(); }); System::println("%s: %s", source_paragraph.name, s); } Checks::exit_success(VCPKG_LINE_INFO); }
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths) { static const std::string example = Strings::format( "The argument should be a substring to search for, or no argument to display all libraries.\n%s", Commands::Help::create_example_string("search png")); args.check_max_arg_count(1, example); const std::unordered_set<std::string> options = args.check_and_get_optional_command_arguments({OPTION_GRAPH, OPTION_FULLDESC}); auto sources_and_errors = Paragraphs::try_load_all_ports(paths.get_filesystem(), paths.ports); if (!sources_and_errors.errors.empty()) { if (vcpkg::g_debugging) { print_error_message(sources_and_errors.errors); } else { for (auto&& error : sources_and_errors.errors) { System::println( System::Color::warning, "Warning: an error occurred while parsing '%s'", error->name); } System::println(System::Color::warning, "Use '--debug' to get more information about the parse failures.\n"); } } auto& source_paragraphs = sources_and_errors.paragraphs; if (options.find(OPTION_GRAPH) != options.cend()) { const std::string graph_as_string = create_graph_as_string(source_paragraphs); System::println(graph_as_string); Checks::exit_success(VCPKG_LINE_INFO); } if (args.command_arguments.empty()) { for (const auto& source_control_file : source_paragraphs) { do_print(*source_control_file->core_paragraph, options.find(OPTION_FULLDESC) != options.cend()); for (auto&& feature_paragraph : source_control_file->feature_paragraphs) { do_print(source_control_file->core_paragraph->name, *feature_paragraph, options.find(OPTION_FULLDESC) != options.cend()); } } } else { const auto& icontains = Strings::case_insensitive_ascii_contains; // At this point there is 1 argument auto&& args_zero = args.command_arguments[0]; for (const auto& source_control_file : source_paragraphs) { auto&& sp = *source_control_file->core_paragraph; bool contains_name = icontains(sp.name, args_zero); if (contains_name || icontains(sp.description, args_zero)) { do_print(sp, options.find(OPTION_FULLDESC) != options.cend()); } for (auto&& feature_paragraph : source_control_file->feature_paragraphs) { if (contains_name || icontains(feature_paragraph->name, args_zero) || icontains(feature_paragraph->description, args_zero)) { do_print(sp.name, *feature_paragraph, options.find(OPTION_FULLDESC) != options.cend()); } } } } System::println( "\nIf your library is not listed, please open an issue at and/or consider making a pull request:\n" " https://github.com/Microsoft/vcpkg/issues"); Checks::exit_success(VCPKG_LINE_INFO); }