summaryrefslogtreecommitdiff
path: root/src/other_tools/just_mr/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/other_tools/just_mr/main.cpp')
-rw-r--r--src/other_tools/just_mr/main.cpp115
1 files changed, 12 insertions, 103 deletions
diff --git a/src/other_tools/just_mr/main.cpp b/src/other_tools/just_mr/main.cpp
index 53711136..965c3bf0 100644
--- a/src/other_tools/just_mr/main.cpp
+++ b/src/other_tools/just_mr/main.cpp
@@ -442,51 +442,11 @@ void SetupLogging(MultiRepoLogArguments const& clargs) {
return config;
}
-/// \brief Add repos from a given repo list to the reported repos set if its
-/// type is distdir. Ignore any missing or wrong info.
-void AddDistdirReportedRepos(
- ExpressionPtr const& repos,
- std::string const& repo_name,
- std::shared_ptr<std::unordered_set<std::string>> const&
- reported_repos_set) {
- auto repo_desc_key = repos->Get(repo_name, Expression::none_t{});
- auto repo_desc = repo_desc_key->Get("repository", Expression::none_t{});
- auto resolved_repo_desc = JustMR::Utils::ResolveRepo(repo_desc, repos);
- if (not resolved_repo_desc) {
- return;
- }
- auto repo_type = (*resolved_repo_desc)->Get("type", Expression::none_t{});
- if (not repo_type->IsString()) {
- return;
- }
- // check if the repo is distdir
- auto repo_type_str = repo_type->String();
- if (repo_type_str != "distdir") {
- return;
- }
- // get distdir list
- auto repo_desc_repositories =
- repo_desc->Get("repositories", Expression::none_t{});
- if (not repo_desc_repositories->IsList()) {
- return;
- }
- auto distdir_repos = repo_desc_repositories->List();
- // add to reported set
- for (auto const& entry : distdir_repos) {
- if (entry->IsString()) {
- reported_repos_set->insert(entry->String());
- }
- }
-}
-
/// \brief Get the repo dependency closure for a given main repository.
/// For progress reporting we include
-void ReachableRepositories(
- ExpressionPtr const& repos,
- std::string const& main,
- std::shared_ptr<SetupRepos> const& setup_repos,
- std::shared_ptr<std::unordered_set<std::string>> const& reported_repos_set =
- nullptr) {
+void ReachableRepositories(ExpressionPtr const& repos,
+ std::string const& main,
+ std::shared_ptr<SetupRepos> const& setup_repos) {
// use temporary sets to avoid duplicates
std::unordered_set<std::string> include_repos_set{};
if (repos->IsMap()) {
@@ -496,12 +456,6 @@ void ReachableRepositories(
if (not include_repos_set.contains(repo_name)) {
// if not found, add it and repeat for its bindings
include_repos_set.insert(repo_name);
- // add to reported repos, if needed
- if (reported_repos_set) {
- reported_repos_set->insert(repo_name);
- AddDistdirReportedRepos(
- repos, repo_name, reported_repos_set);
- }
// check bindings
auto repos_repo_name =
repos->Get(repo_name, Expression::none_t{});
@@ -533,12 +487,6 @@ void ReachableRepositories(
if (layer_val.IsNotNull() and layer_val->IsString()) {
auto repo_name = layer_val->String();
setup_repos_set.insert(repo_name);
- // add to reported repos, if needed
- if (reported_repos_set) {
- reported_repos_set->insert(repo_name);
- AddDistdirReportedRepos(
- repos, repo_name, reported_repos_set);
- }
}
}
}
@@ -562,20 +510,10 @@ void ReachableRepositories(
void DefaultReachableRepositories(
ExpressionPtr const& repos,
- std::shared_ptr<SetupRepos> const& setup_repos,
- std::shared_ptr<std::unordered_set<std::string>> const& reported_repos_set =
- nullptr) {
+ std::shared_ptr<SetupRepos> const& setup_repos) {
if (repos.IsNotNull() and repos->IsMap()) {
setup_repos->to_setup = repos->Map().Keys();
setup_repos->to_include = setup_repos->to_setup;
- // get reported repos
- if (reported_repos_set) {
- *reported_repos_set = std::unordered_set<std::string>(
- setup_repos->to_setup.begin(), setup_repos->to_setup.end());
- for (auto const& repo : setup_repos->to_setup) {
- AddDistdirReportedRepos(repos, repo, reported_repos_set);
- }
- }
}
}
@@ -804,19 +742,8 @@ void DefaultReachableRepositories(
auto repo_fetch_map =
CreateRepoFetchMap(&content_cas_map, *fetch_dir, arguments.common.jobs);
- // set up map for progress tracing
- auto& repo_set = JustMRProgress::Instance().RepositorySet();
- repo_set.clear();
- repo_set.reserve(nr);
- for (auto const& repo : repos_to_fetch) {
- auto distfile = (repo.archive.distfile
- ? repo.archive.distfile.value()
- : std::filesystem::path(repo.archive.fetch_url)
- .filename()
- .string());
- repo_set.emplace(std::move(distfile));
- }
// set up progress observer
+ JustMRProgress::Instance().SetTotal(repos_to_fetch.size());
std::atomic<bool> done{false};
std::condition_variable cv{};
auto reporter = JustMRProgressReporter::Reporter();
@@ -1010,15 +937,8 @@ void DefaultReachableRepositories(
auto git_update_map =
CreateGitUpdateMap(git_repo->GetGitCAS(), arguments.common.jobs);
- // set up map for progress tracing
- auto& repo_set = JustMRProgress::Instance().RepositorySet();
- repo_set.clear();
- repo_set.reserve(nr);
- for (auto const& repo : repos_to_update) {
- auto id = fmt::format("{}:{}", repo.first, repo.second);
- repo_set.emplace(std::move(id));
- }
// set up progress observer
+ JustMRProgress::Instance().SetTotal(repos_to_update.size());
std::atomic<bool> done{false};
std::condition_variable cv{};
auto reporter = JustMRProgressReporter::Reporter();
@@ -1105,8 +1025,7 @@ void DefaultReachableRepositories(
mr_config["main"] = *main;
}
// get default repos to setup and to include
- auto repos_to_report = std::make_shared<std::unordered_set<std::string>>();
- DefaultReachableRepositories(repos, setup_repos, repos_to_report);
+ DefaultReachableRepositories(repos, setup_repos);
// check if main is to be taken as first repo name lexicographically
if (not main and not setup_repos->to_setup.empty()) {
main = *std::min_element(setup_repos->to_setup.begin(),
@@ -1114,16 +1033,9 @@ void DefaultReachableRepositories(
}
// final check on which repos are to be set up
if (main and not arguments.setup.sub_all) {
- ReachableRepositories(repos, *main, setup_repos, repos_to_report);
+ ReachableRepositories(repos, *main, setup_repos);
}
- // report progress
- auto nr = repos_to_report->size();
- Logger::Log(LogLevel::Info,
- "Found {} {} to set up",
- nr,
- nr == 1 ? "repository" : "repositories");
-
// setup the required async maps
auto crit_git_op_ptr = std::make_shared<CriticalGitOpGuard>();
auto critical_git_op_map = CreateCriticalGitOpMap(crit_git_op_ptr);
@@ -1162,14 +1074,11 @@ void DefaultReachableRepositories(
&tree_id_git_map,
arguments.common.jobs);
- // set up map for progress tracing
- auto& repo_set = JustMRProgress::Instance().RepositorySet();
- repo_set.clear();
- repo_set.reserve(nr);
- for (auto const& repo : *repos_to_report) {
- repo_set.emplace(repo);
- }
// set up progress observer
+ Logger::Log(LogLevel::Info,
+ "Found {} repositories to set up",
+ setup_repos->to_setup.size());
+ JustMRProgress::Instance().SetTotal(setup_repos->to_setup.size());
std::atomic<bool> done{false};
std::condition_variable cv{};
auto reporter = JustMRProgressReporter::Reporter();