aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2016-11-07 14:39:52 -0800
committerAlexander Karatarakis <alkarata@microsoft.com>2016-11-07 14:39:52 -0800
commit45eee10708a97a90566af8ab7d781e89b255055b (patch)
treeaa8bf2d6accce9111e272222aeef76cfe053bdd0 /toolsrc/src
parent7e05c53628e686e5e2aa39e185789c2b6146f35b (diff)
downloadvcpkg-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.cpp58
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);
}
}