diff options
Diffstat (limited to 'toolsrc/src/commands_cache.cpp')
| -rw-r--r-- | toolsrc/src/commands_cache.cpp | 60 |
1 files changed, 32 insertions, 28 deletions
diff --git a/toolsrc/src/commands_cache.cpp b/toolsrc/src/commands_cache.cpp index 53518264e..5e20a39af 100644 --- a/toolsrc/src/commands_cache.cpp +++ b/toolsrc/src/commands_cache.cpp @@ -5,19 +5,10 @@ namespace vcpkg { - template <class Pred> - static void do_print(const vcpkg_paths& paths, Pred predicate) + static std::vector<BinaryParagraph> read_all_binary_paragraphs(const vcpkg_paths& paths) { - auto it = fs::directory_iterator(paths.packages); - const fs::directory_iterator end_it = fs::directory_iterator(); - - if (it == end_it) - { - System::println("No packages are cached."); - exit(EXIT_SUCCESS); - } - - for (; it != end_it; ++it) + std::vector<BinaryParagraph> output; + for (auto it = fs::directory_iterator(paths.packages); it != fs::directory_iterator(); ++it) { const fs::path& path = it->path(); @@ -30,18 +21,16 @@ namespace vcpkg if (pghs.size() != 1) continue; - const BinaryParagraph src = BinaryParagraph(pghs[0]); - const std::string displayname = src.displayname(); - if (predicate(displayname)) - { - System::println(displayname.c_str()); - } + const BinaryParagraph binary_paragraph = BinaryParagraph(pghs[0]); + output.push_back(binary_paragraph); } } catch (std::runtime_error const&) { } } + + return output; } void cache_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths) @@ -50,20 +39,35 @@ namespace vcpkg "The argument should be a substring to search for, or no argument to display all cached libraries.\n%s", create_example_string("cache png")); args.check_max_arg_count(1, example.c_str()); - if (args.command_arguments.size() == 0) + const std::vector<BinaryParagraph> binary_paragraphs = read_all_binary_paragraphs(paths); + if (binary_paragraphs.empty()) { - do_print(paths, [](const std::string&) -> bool - { - return true; - }); + System::println("No packages are cached."); exit(EXIT_SUCCESS); } - // At this point there is 1 argument - do_print(paths, [&](const std::string& port_name) -> bool - { - return Strings::case_insensitive_ascii_find(port_name, args.command_arguments[0]) != port_name.end(); - }); + if (args.command_arguments.size() == 0) + { + for (const BinaryParagraph& binary_paragraph : binary_paragraphs) + { + const std::string displayname = binary_paragraph.displayname(); + System::println(displayname.c_str()); + } + } + else + { + // At this point there is 1 argument + for (const BinaryParagraph& binary_paragraph : binary_paragraphs) + { + const std::string displayname = binary_paragraph.displayname(); + if (Strings::case_insensitive_ascii_find(displayname, args.command_arguments[0]) == displayname.end()) + { + continue; + } + + System::println(displayname.c_str()); + } + } exit(EXIT_SUCCESS); } |
