diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-10-31 17:07:14 +0100 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-11-14 13:35:01 +0100 |
commit | bc84005095bab7c62faf0ddf08763bd96892e478 (patch) | |
tree | 181b5c868fc475534706bb1c83f8746c10836072 /src/other_tools/repo_map | |
parent | e4aee9470da57a47d029f15ffa6795fba0398d60 (diff) | |
download | justbuild-bc84005095bab7c62faf0ddf08763bd96892e478.tar.gz |
just-mr: Add 'mirrors' field to archive-like repositories
Also extends 'distdir' repositories logic accordingly.
Diffstat (limited to 'src/other_tools/repo_map')
-rw-r--r-- | src/other_tools/repo_map/repos_to_setup_map.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/other_tools/repo_map/repos_to_setup_map.cpp b/src/other_tools/repo_map/repos_to_setup_map.cpp index 4c1b80ad..9644d615 100644 --- a/src/other_tools/repo_map/repos_to_setup_map.cpp +++ b/src/other_tools/repo_map/repos_to_setup_map.cpp @@ -213,6 +213,29 @@ void ArchiveCheckout(ExpressionPtr const& repo_desc, auto repo_desc_distfile = repo_desc->Get("distfile", Expression::none_t{}); auto repo_desc_sha256 = repo_desc->Get("sha256", Expression::none_t{}); auto repo_desc_sha512 = repo_desc->Get("sha512", Expression::none_t{}); + // check optional mirrors + auto repo_desc_mirrors = repo_desc->Get("mirrors", Expression::list_t{}); + std::vector<std::string> mirrors{}; + if (repo_desc_mirrors->IsList()) { + mirrors.reserve(repo_desc_mirrors->List().size()); + for (auto const& elem : repo_desc_mirrors->List()) { + if (not elem->IsString()) { + (*logger)(fmt::format("ArchiveCheckout: Unsupported list entry " + "{} in optional field \"mirrors\"", + elem->ToString()), + /*fatal=*/true); + return; + } + mirrors.emplace_back(elem->String()); + } + } + else { + (*logger)(fmt::format("ArchiveCheckout: Optional field \"mirrors\" " + "should be a list of strings, but found: {}", + repo_desc_mirrors->ToString()), + /*fatal=*/true); + return; + } // check "special" pragma auto repo_desc_pragma = repo_desc->At("pragma"); auto pragma_special = repo_desc_pragma @@ -238,6 +261,7 @@ void ArchiveCheckout(ExpressionPtr const& repo_desc, ? std::make_optional(repo_desc_distfile->String()) : std::nullopt, .fetch_url = repo_desc_fetch->get()->String(), + .mirrors = std::move(mirrors), .sha256 = repo_desc_sha256->IsString() ? std::make_optional(repo_desc_sha256->String()) : std::nullopt, @@ -511,6 +535,36 @@ void DistdirCheckout(ExpressionPtr const& repo_desc, auto repo_desc_sha512 = (*resolved_repo_desc)->Get("sha512", Expression::none_t{}); + // check optional mirrors + auto repo_desc_mirrors = + (*resolved_repo_desc)->Get("mirrors", Expression::list_t{}); + std::vector<std::string> mirrors{}; + if (repo_desc_mirrors->IsList()) { + mirrors.reserve(repo_desc_mirrors->List().size()); + for (auto const& elem : repo_desc_mirrors->List()) { + if (not elem->IsString()) { + (*logger)(fmt::format( + "DistdirCheckout: Unsupported list entry " + "{} in optional field \"mirrors\" for " + "repository {}", + elem->ToString(), + nlohmann::json(dist_repo_name).dump()), + /*fatal=*/true); + return; + } + mirrors.emplace_back(elem->String()); + } + } + else { + (*logger)(fmt::format("DistdirCheckout: Optional field " + "\"mirrors\" for repository {} should be " + "a list of strings, but found: {}", + nlohmann::json(dist_repo_name).dump(), + repo_desc_mirrors->ToString()), + /*fatal=*/true); + return; + } + ArchiveContent archive = { .content = repo_desc_content->get()->String(), .distfile = @@ -518,6 +572,7 @@ void DistdirCheckout(ExpressionPtr const& repo_desc, ? std::make_optional(repo_desc_distfile->String()) : std::nullopt, .fetch_url = repo_desc_fetch->get()->String(), + .mirrors = std::move(mirrors), .sha256 = repo_desc_sha256->IsString() ? std::make_optional(repo_desc_sha256->String()) : std::nullopt, |