aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/SourceParagraph.cpp
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2017-06-08 00:36:17 -0700
committerRobert Schumacher <roschuma@microsoft.com>2017-06-08 04:32:57 -0700
commit247a6cec90004b8666d155eacc0f27d3a6c8fcf9 (patch)
treee63038044933f747161f94f52fc35f435573d08b /toolsrc/src/SourceParagraph.cpp
parent1b717d851fda51e03b98a18f5304e29b7876c8a3 (diff)
downloadvcpkg-247a6cec90004b8666d155eacc0f27d3a6c8fcf9.tar.gz
vcpkg-247a6cec90004b8666d155eacc0f27d3a6c8fcf9.zip
[vcpkg] Improve diagnostics upon port load failure
Diffstat (limited to 'toolsrc/src/SourceParagraph.cpp')
-rw-r--r--toolsrc/src/SourceParagraph.cpp64
1 files changed, 36 insertions, 28 deletions
diff --git a/toolsrc/src/SourceParagraph.cpp b/toolsrc/src/SourceParagraph.cpp
index 2508af1e8..4001e891f 100644
--- a/toolsrc/src/SourceParagraph.cpp
+++ b/toolsrc/src/SourceParagraph.cpp
@@ -27,42 +27,52 @@ namespace vcpkg
static const std::string SUPPORTS = "Supports";
}
- static const std::vector<std::string>& get_list_of_valid_fields()
+ static span<const std::string> get_list_of_valid_fields()
{
- static const std::vector<std::string> valid_fields = {SourceParagraphRequiredField::SOURCE,
- SourceParagraphRequiredField::VERSION,
+ static const std::string valid_fields[] = {SourceParagraphRequiredField::SOURCE,
+ SourceParagraphRequiredField::VERSION,
- SourceParagraphOptionalField::DESCRIPTION,
- SourceParagraphOptionalField::MAINTAINER,
- SourceParagraphOptionalField::BUILD_DEPENDS,
- SourceParagraphOptionalField::SUPPORTS};
+ SourceParagraphOptionalField::DESCRIPTION,
+ SourceParagraphOptionalField::MAINTAINER,
+ SourceParagraphOptionalField::BUILD_DEPENDS,
+ SourceParagraphOptionalField::SUPPORTS};
return valid_fields;
}
- void print_error_message(const ParseControlErrorInfo& info)
+ void print_error_message(span<const ParseControlErrorInfo> error_info_list)
{
- System::println(
- System::Color::error, "Error: There are invalid fields in the Source Paragraph of %s", info.name);
- System::println("The following fields were not expected:\n\n %s\n\n", info.remaining_fields_as_string);
- System::println("This is the list of valid fields (case-sensitive): \n\n %s\n", info.valid_fields_as_string);
- System::println("Different source may be available for vcpkg. Use .\\bootstrap-vcpkg.bat to update.\n");
- }
+ Checks::check_exit(VCPKG_LINE_INFO, error_info_list.size() > 0);
- void print_error_message(std::vector<ParseControlErrorInfo> error_info_list)
- {
- if (error_info_list.size() == 0) return;
- for (ParseControlErrorInfo error_info : error_info_list)
+ for (auto&& error_info : error_info_list)
{
- System::println(
- System::Color::error, "Error: There are invalid fields in the Source Paragraph of %s", error_info.name);
- System::println("The following fields were not expected:\n\n %s\n\n",
- error_info.remaining_fields_as_string);
+ if (error_info.error)
+ {
+ System::println(
+ System::Color::error, "Error: while loading %s: %s", error_info.name, error_info.error.message());
+ }
}
- System::println("This is the list of valid fields (case-sensitive): \n\n %s\n",
- error_info_list.front().valid_fields_as_string);
- System::println("Different source may be available for vcpkg. Use .\\bootstrap-vcpkg.bat to update.\n");
+ bool have_remaining_fields = false;
+ for (auto&& error_info : error_info_list)
+ {
+ if (!error_info.remaining_fields_as_string.empty())
+ {
+ System::println(System::Color::error,
+ "Error: There are invalid fields in the Source Paragraph of %s",
+ error_info.name);
+ System::println("The following fields were not expected:\n\n %s\n\n",
+ error_info.remaining_fields_as_string);
+ have_remaining_fields = true;
+ }
+ }
+
+ if (have_remaining_fields)
+ {
+ System::println("This is the list of valid fields (case-sensitive): \n\n %s\n",
+ Strings::join("\n ", get_list_of_valid_fields()));
+ System::println("Different source may be available for vcpkg. Use .\\bootstrap-vcpkg.bat to update.\n");
+ }
}
ExpectedT<SourceParagraph, ParseControlErrorInfo> SourceParagraph::parse_control_file(
@@ -83,12 +93,10 @@ namespace vcpkg
if (!fields.empty())
{
const std::vector<std::string> remaining_fields = Maps::extract_keys(fields);
- const std::vector<std::string>& valid_fields = get_list_of_valid_fields();
const std::string remaining_fields_as_string = Strings::join("\n ", remaining_fields);
- const std::string valid_fields_as_string = Strings::join("\n ", valid_fields);
- return ParseControlErrorInfo{sparagraph.name, remaining_fields_as_string, valid_fields_as_string};
+ return ParseControlErrorInfo{sparagraph.name, remaining_fields_as_string};
}
return sparagraph;
}