diff options
Diffstat (limited to 'src/other_tools/just_mr/main.cpp')
-rw-r--r-- | src/other_tools/just_mr/main.cpp | 115 |
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(); |