aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/commands_list.cpp
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-02-08 15:12:28 -0800
committerGitHub <noreply@github.com>2017-02-08 15:12:28 -0800
commit7ddae17e2f520e83d25f78c078bf8b8a58fff447 (patch)
tree87e2fc5c57a685367ec051b1efbdeb5d3ab43f4d /toolsrc/src/commands_list.cpp
parent5e588ddb5be9e6e27cebcc3be2e1a27f3ca83a50 (diff)
parenta9f7fc6e90feaad50c1221ef9bd56e2620302215 (diff)
downloadvcpkg-7ddae17e2f520e83d25f78c078bf8b8a58fff447.tar.gz
vcpkg-7ddae17e2f520e83d25f78c078bf8b8a58fff447.zip
Merge branch 'master' into master
Diffstat (limited to 'toolsrc/src/commands_list.cpp')
-rw-r--r--toolsrc/src/commands_list.cpp66
1 files changed, 51 insertions, 15 deletions
diff --git a/toolsrc/src/commands_list.cpp b/toolsrc/src/commands_list.cpp
index 194e4b435..34a9c2fc8 100644
--- a/toolsrc/src/commands_list.cpp
+++ b/toolsrc/src/commands_list.cpp
@@ -1,32 +1,68 @@
+#include "pch.h"
#include "vcpkg_Commands.h"
-#include "vcpkg.h"
+#include "vcpkglib.h"
#include "vcpkg_System.h"
+#include "vcpkglib_helpers.h"
-namespace vcpkg
+namespace vcpkg::Commands::List
{
- void list_command(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ static void do_print(const StatusParagraph& pgh)
{
- args.check_exact_arg_count(0);
+ System::println("%-27s %-16s %s",
+ pgh.package.displayname(),
+ pgh.package.version,
+ details::shorten_description(pgh.package.description));
+ }
+
+ void perform_and_exit(const vcpkg_cmd_arguments& args, const vcpkg_paths& paths)
+ {
+ 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", Commands::Help::create_example_string("list png"));
+ args.check_max_arg_count(1, example);
- 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);
}
}