summaryrefslogtreecommitdiff
path: root/src/other_tools/just_mr/setup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/other_tools/just_mr/setup.cpp')
-rw-r--r--src/other_tools/just_mr/setup.cpp102
1 files changed, 58 insertions, 44 deletions
diff --git a/src/other_tools/just_mr/setup.cpp b/src/other_tools/just_mr/setup.cpp
index 5ec71a59..0479d0e5 100644
--- a/src/other_tools/just_mr/setup.cpp
+++ b/src/other_tools/just_mr/setup.cpp
@@ -17,6 +17,7 @@
#include <atomic>
#include <condition_variable>
#include <cstddef>
+#include <exception>
#include <thread>
#include "nlohmann/json.hpp"
@@ -291,55 +292,68 @@ auto MultiRepoSetup(std::shared_ptr<Configuration> const& config,
setup_repos,
main,
interactive,
- multi_repo_tool_name](auto const& values) {
- // set the initial setup repositories
- nlohmann::json mr_repos{};
- for (auto const& repo : setup_repos->to_setup) {
- auto i = static_cast<std::size_t>(
- &repo - &setup_repos->to_setup[0]); // get index
- mr_repos[repo] = *values[i];
- }
- // populate ALT_DIRS
- constexpr auto err_msg_format =
- "While performing {} {}:\nWhile populating fields for "
- "repository {}:\nExpected value for key \"{}\" to be a "
- "string, but found {}";
- for (auto const& repo : setup_repos->to_include) {
- auto desc = repos->Get(repo, Expression::none_t{});
- if (desc.IsNotNull()) {
- if (not((main and (repo == *main)) and interactive)) {
- for (auto const& key : kAltDirs) {
- auto val = desc->Get(key, Expression::none_t{});
- if (val.IsNotNull()) {
- // we expect a string
- if (not val->IsString()) {
- Logger::Log(
- LogLevel::Error,
- err_msg_format,
- multi_repo_tool_name,
- interactive ? "setup-env" : "setup",
- repo,
- key,
- val->ToString());
- failed = true;
- return;
- }
- if (not((main and
- (val->String() == *main)) and
- interactive)) {
- mr_repos[repo][key] =
- mr_repos[val->String()]
- ["workspace_root"];
+ multi_repo_tool_name](auto const& values) noexcept {
+ try {
+ // set the initial setup repositories
+ nlohmann::json mr_repos{};
+ for (auto const& repo : setup_repos->to_setup) {
+ auto i = static_cast<std::size_t>(
+ &repo - &setup_repos->to_setup[0]); // get index
+ mr_repos[repo] = *values[i];
+ }
+ // populate ALT_DIRS
+ constexpr auto err_msg_format =
+ "While performing {} {}:\nWhile populating fields for "
+ "repository {}:\nExpected value for key \"{}\" to be a "
+ "string, but found {}";
+ for (auto const& repo : setup_repos->to_include) {
+ auto desc = repos->Get(repo, Expression::none_t{});
+ if (desc.IsNotNull()) {
+ if (not((main and (repo == *main)) and
+ interactive)) {
+ for (auto const& key : kAltDirs) {
+ auto val =
+ desc->Get(key, Expression::none_t{});
+ if (val.IsNotNull()) {
+ // we expect a string
+ if (not val->IsString()) {
+ Logger::Log(LogLevel::Error,
+ err_msg_format,
+ multi_repo_tool_name,
+ interactive
+ ? "setup-env"
+ : "setup",
+ repo,
+ key,
+ val->ToString());
+ failed = true;
+ return;
+ }
+ if (not((main and
+ (val->String() == *main)) and
+ interactive)) {
+ mr_repos[repo][key] =
+ mr_repos[val->String()]
+ ["workspace_root"];
+ }
+ // otherwise, continue
}
- // otherwise, continue
}
}
}
}
- }
- // retain only the repos we need
- for (auto const& repo : setup_repos->to_include) {
- mr_config["repositories"][repo] = mr_repos[repo];
+ // retain only the repos we need
+ for (auto const& repo : setup_repos->to_include) {
+ mr_config["repositories"][repo] = mr_repos[repo];
+ }
+ } catch (std::exception const& ex) {
+ Logger::Log(LogLevel::Error,
+ "While performing {} {}:\nPopulating the "
+ "configuration failed with:\n{}",
+ multi_repo_tool_name,
+ interactive ? "setup-env" : "setup",
+ ex.what());
+ failed = true;
}
},
[&failed, interactive, multi_repo_tool_name](auto const& msg,