aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/commands_search.cpp
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-06-19 15:09:54 -0700
committerRobert Schumacher <roschuma@microsoft.com>2017-06-19 15:09:54 -0700
commit34c08e2b15777c86c5aaacfee5f04eed986c62da (patch)
tree5a65eed065343bcb2f999da6937d423fff00c93e /toolsrc/src/commands_search.cpp
parent8d955c83b53d42983ebd9a046a0a0a5ade08537f (diff)
parentbca0988023a8c7bfc896d0f5787eb02e74c6fb59 (diff)
downloadvcpkg-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.cpp61
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());
}
}