summaryrefslogtreecommitdiff
path: root/src/other_tools/repo_map
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-10-31 15:50:59 +0100
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2023-11-14 13:35:01 +0100
commit17f88a4752243f09ede9571014b8d723aca6ca44 (patch)
treeb50c76f7d9aff20dd95726dde337e005a71bb5c6 /src/other_tools/repo_map
parent4c12fa12f7ad54174cce97ee511b9a897c992fc1 (diff)
downloadjustbuild-17f88a4752243f09ede9571014b8d723aca6ca44.tar.gz
just-mr: Add 'mirrors' field to 'git' repositories
Diffstat (limited to 'src/other_tools/repo_map')
-rw-r--r--src/other_tools/repo_map/repos_to_setup_map.cpp24
1 files changed, 24 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 a65a6c50..d0396a0c 100644
--- a/src/other_tools/repo_map/repos_to_setup_map.cpp
+++ b/src/other_tools/repo_map/repos_to_setup_map.cpp
@@ -92,6 +92,29 @@ void GitCheckout(ExpressionPtr const& repo_desc,
? repo_desc_subdir->String()
: "")
.lexically_normal();
+ // 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("GitCheckout: Unsupported list entry {} "
+ "in optional field \"mirrors\"",
+ elem->ToString()),
+ /*fatal=*/true);
+ return;
+ }
+ mirrors.emplace_back(elem->String());
+ }
+ }
+ else {
+ (*logger)(fmt::format("GitCheckout: 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
@@ -115,6 +138,7 @@ void GitCheckout(ExpressionPtr const& repo_desc,
.repo_url = repo_desc_repository->get()->String(),
.branch = repo_desc_branch->get()->String(),
.subdir = subdir.empty() ? "." : subdir.string(),
+ .mirrors = std::move(mirrors),
.origin = repo_name,
.ignore_special = pragma_special_value == PragmaSpecial::Ignore,
.absent = pragma_absent_value};