diff options
| author | Robert Schumacher <roschuma@microsoft.com> | 2017-06-19 15:09:54 -0700 |
|---|---|---|
| committer | Robert Schumacher <roschuma@microsoft.com> | 2017-06-19 15:09:54 -0700 |
| commit | 34c08e2b15777c86c5aaacfee5f04eed986c62da (patch) | |
| tree | 5a65eed065343bcb2f999da6937d423fff00c93e /toolsrc/src/commands_search.cpp | |
| parent | 8d955c83b53d42983ebd9a046a0a0a5ade08537f (diff) | |
| parent | bca0988023a8c7bfc896d0f5787eb02e74c6fb59 (diff) | |
| download | vcpkg-34c08e2b15777c86c5aaacfee5f04eed986c62da.tar.gz vcpkg-34c08e2b15777c86c5aaacfee5f04eed986c62da.zip | |
Merge branch 'feature_package_implementation'
Diffstat (limited to 'toolsrc/src/commands_search.cpp')
| -rw-r--r-- | toolsrc/src/commands_search.cpp | 61 |
1 files changed, 44 insertions, 17 deletions
diff --git a/toolsrc/src/commands_search.cpp b/toolsrc/src/commands_search.cpp index 0f8ebbb3b..b39d21887 100644 --- a/toolsrc/src/commands_search.cpp +++ b/toolsrc/src/commands_search.cpp @@ -19,15 +19,16 @@ namespace vcpkg::Commands::Search return output; } - static std::string create_graph_as_string(const std::vector<SourceParagraph>& source_paragraphs) + static std::string create_graph_as_string(const std::vector<SourceControlFile>& source_control_files) { int empty_node_count = 0; std::string s; s.append("digraph G{ rankdir=LR; edge [minlen=3]; overlap=false;"); - for (const SourceParagraph& source_paragraph : source_paragraphs) + for (const SourceControlFile& source_control_file : source_control_files) { + const SourceParagraph& source_paragraph = source_control_file.core_paragraph; if (source_paragraph.depends.empty()) { empty_node_count++; @@ -46,10 +47,9 @@ namespace vcpkg::Commands::Search s.append(Strings::format("empty [label=\"%d singletons...\"]; }", empty_node_count)); return s; } - - static void do_print(const SourceParagraph& source_paragraph, bool FullDesc) + static void do_print(const SourceParagraph& source_paragraph, bool full_desc) { - if (FullDesc) + if (full_desc) { System::println( "%-20s %-16s %s", source_paragraph.name, source_paragraph.version, source_paragraph.description); @@ -63,6 +63,20 @@ namespace vcpkg::Commands::Search } } + static void do_print(const std::string& name, const FeatureParagraph& feature_paragraph, bool full_desc) + { + if (full_desc) + { + System::println("%-37s %s", name + "[" + feature_paragraph.name + "]", feature_paragraph.description); + } + else + { + System::println("%-37s %s", + name + "[" + feature_paragraph.name + "]", + details::shorten_description(feature_paragraph.description)); + } + } + void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths) { static const std::string example = Strings::format( @@ -85,7 +99,7 @@ namespace vcpkg::Commands::Search for (auto&& error : sources_and_errors.errors) { System::println( - System::Color::warning, "Warning: an error occurred while parsing '%s'\n", error.name); + 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"); @@ -93,7 +107,6 @@ namespace vcpkg::Commands::Search } 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); @@ -103,27 +116,41 @@ namespace vcpkg::Commands::Search if (args.command_arguments.empty()) { - for (const SourceParagraph& source_paragraph : source_paragraphs) + for (const SourceControlFile& source_control_file : source_paragraphs) { - do_print(source_paragraph, options.find(OPTION_FULLDESC) != options.cend()); + 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 - for (const SourceParagraph& source_paragraph : source_paragraphs) + auto&& args_zero = args.command_arguments[0]; + for (const SourceControlFile& source_control_file : source_paragraphs) { - if (Strings::case_insensitive_ascii_find(source_paragraph.name, args.command_arguments[0]) == - source_paragraph.name.end()) + auto&& sp = source_control_file.core_paragraph; + + bool contains_name = icontains(sp.name, args_zero); + if (contains_name || icontains(sp.description, args_zero)) { - if (Strings::case_insensitive_ascii_find(source_paragraph.description, args.command_arguments[0]) == - source_paragraph.description.end()) + 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)) { - continue; + do_print(sp.name, *feature_paragraph, options.find(OPTION_FULLDESC) != options.cend()); } } - - do_print(source_paragraph, options.find(OPTION_FULLDESC) != options.cend()); } } |
