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.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/other_tools/just_mr/main.cpp b/src/other_tools/just_mr/main.cpp
index cffaf8e1..d1675bdd 100644
--- a/src/other_tools/just_mr/main.cpp
+++ b/src/other_tools/just_mr/main.cpp
@@ -514,6 +514,9 @@ void DefaultReachableRepositories(
[[nodiscard]] auto MultiRepoFetch(std::shared_ptr<Configuration> const& config,
CommandLineArguments const& arguments)
-> int {
+ // provide report
+ Logger::Log(LogLevel::Info, "Performing repositories fetch");
+
// find fetch dir
auto fetch_dir = arguments.fetch.fetch_dir;
if (not fetch_dir) {
@@ -715,11 +718,39 @@ void DefaultReachableRepositories(
return kExitFetchError;
}
}
+
+ // report progress
+ auto nr = repos_to_fetch.size();
+ Logger::Log(LogLevel::Info,
+ "Found {} {} to fetch",
+ nr,
+ nr == 1 ? "archive" : "archives");
+
// create async maps
auto content_cas_map = CreateContentCASMap(arguments.common.just_mr_paths,
arguments.common.jobs);
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
+ std::atomic<bool> done{false};
+ std::condition_variable cv{};
+ auto reporter = JustMRProgressReporter::Reporter();
+ auto observer =
+ std::thread([reporter, &done, &cv]() { reporter(&done, &cv); });
+
// do the fetch
bool failed{false};
{
@@ -743,9 +774,17 @@ void DefaultReachableRepositories(
failed = failed or fatal;
});
}
+
+ // close progress observer
+ done = true;
+ cv.notify_all();
+ observer.join();
+
if (failed) {
return kExitFetchError;
}
+ // report success
+ Logger::Log(LogLevel::Info, "Fetch completed");
return kExitSuccess;
}