diff options
| author | Alexander Karatarakis <alkarata@microsoft.com> | 2016-11-07 14:39:52 -0800 |
|---|---|---|
| committer | Alexander Karatarakis <alkarata@microsoft.com> | 2016-11-07 14:39:52 -0800 |
| commit | 45eee10708a97a90566af8ab7d781e89b255055b (patch) | |
| tree | aa8bf2d6accce9111e272222aeef76cfe053bdd0 /toolsrc/src | |
| parent | 7e05c53628e686e5e2aa39e185789c2b6146f35b (diff) | |
| download | vcpkg-45eee10708a97a90566af8ab7d781e89b255055b.tar.gz vcpkg-45eee10708a97a90566af8ab7d781e89b255055b.zip | |
Add simple substring filtering to `vcpkg list`
Diffstat (limited to 'toolsrc/src')
| -rw-r--r-- | toolsrc/src/commands_list.cpp | 58 |
1 files changed, 46 insertions, 12 deletions
diff --git a/toolsrc/src/commands_list.cpp b/toolsrc/src/commands_list.cpp index 194e4b435..87aad1991 100644 --- a/toolsrc/src/commands_list.cpp +++ b/toolsrc/src/commands_list.cpp @@ -4,29 +4,63 @@ namespace vcpkg { + static void do_print(const StatusParagraph& pgh) + { + System::println("%-27s %-16s %s", + pgh.package.displayname(), + pgh.package.version, + shorten_description(pgh.package.description)); + } + void list_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths) { - args.check_exact_arg_count(0); + static const std::string example = Strings::format( + "The argument should be a substring to search for, or no argument to display all installed libraries.\n%s", create_example_string("list png")); + args.check_max_arg_count(1, example.c_str()); - std::vector<std::string> packages_output; - for (auto&& pgh : database_load_check(paths)) + const StatusParagraphs status_paragraphs = database_load_check(paths); + std::vector<StatusParagraph> installed_packages; + for (auto&& pgh : status_paragraphs) { if (pgh->state == install_state_t::not_installed && pgh->want == want_t::purge) continue; - packages_output.push_back(Strings::format("%-27s %-16s %s", - pgh->package.displayname(), - pgh->package.version, - shorten_description(pgh->package.description))); + installed_packages.push_back(*pgh); + } + + if (installed_packages.empty()) + { + System::println("No packages are installed. Did you mean `search`?"); + exit(EXIT_SUCCESS); } - std::sort(packages_output.begin(), packages_output.end()); - for (auto&& package : packages_output) + + std::sort(installed_packages.begin(), installed_packages.end(), + [ ]( const StatusParagraph& lhs, const StatusParagraph& rhs ) -> bool + { + return lhs.package.displayname() < rhs.package.displayname(); + }); + + if (args.command_arguments.size() == 0) { - System::println(package.c_str()); + for (const StatusParagraph& status_paragraph : installed_packages) + { + do_print(status_paragraph); + } } - if (packages_output.empty()) + else { - System::println("No packages are installed. Did you mean `search`?"); + // At this point there is 1 argument + for (const StatusParagraph& status_paragraph : installed_packages) + { + const std::string displayname = status_paragraph.package.displayname(); + if (Strings::case_insensitive_ascii_find(displayname, args.command_arguments[0]) == displayname.end()) + { + continue; + } + + do_print(status_paragraph); + } } + exit(EXIT_SUCCESS); } } |
