summaryrefslogtreecommitdiff
path: root/src/other_tools/repo_map
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-10-31 17:07:14 +0100
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-11-14 13:35:01 +0100
commitbc84005095bab7c62faf0ddf08763bd96892e478 (patch)
tree181b5c868fc475534706bb1c83f8746c10836072 /src/other_tools/repo_map
parente4aee9470da57a47d029f15ffa6795fba0398d60 (diff)
downloadjustbuild-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.cpp55
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,