From 484354347b508bc90c898067b4c23f8eccf2bfed Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Mon, 13 Jan 2025 15:19:08 +0100 Subject: Use GitRepo::IsTreeInRepo in target utils --- .../serve_api/serve_service/target_utils.cpp | 47 +++++++++------------- 1 file changed, 20 insertions(+), 27 deletions(-) (limited to 'src/buildtool/serve_api/serve_service/target_utils.cpp') diff --git a/src/buildtool/serve_api/serve_service/target_utils.cpp b/src/buildtool/serve_api/serve_service/target_utils.cpp index 2cf940a8..433c2961 100644 --- a/src/buildtool/serve_api/serve_service/target_utils.cpp +++ b/src/buildtool/serve_api/serve_service/target_utils.cpp @@ -29,43 +29,36 @@ #include "src/buildtool/logging/log_level.hpp" #include "src/utils/cpp/expected.hpp" -auto IsTreeInRepo(std::string const& tree_id, - std::filesystem::path const& repo_path, - std::shared_ptr const& logger) -> bool { - if (auto git_cas = GitCAS::Open(repo_path)) { - if (auto repo = GitRepo::Open(git_cas)) { - // wrap logger for GitRepo call - auto wrapped_logger = std::make_shared( - [logger, repo_path, tree_id](auto const& msg, bool fatal) { - if (fatal) { - logger->Emit(LogLevel::Info, - "ServeTarget: While checking existence of " - "tree {} in repository {}:\n{}", - tree_id, - repo_path.string(), - msg); - } - }); - if (auto res = repo->CheckTreeExists(tree_id, wrapped_logger)) { - return *res; - } - } - } - return false; // tree not found -} - auto GetServingRepository(RemoteServeConfig const& serve_config, StorageConfig const& storage_config, std::string const& tree_id, std::shared_ptr const& logger) -> std::optional { // try the Git cache repository - if (IsTreeInRepo(tree_id, storage_config.GitRoot(), logger)) { + auto in_git_cas = GitRepo::IsTreeInRepo(storage_config.GitRoot(), tree_id); + if (not in_git_cas.has_value()) { + logger->Emit(LogLevel::Info, + "ServeTarget: While checking existence of " + "tree {} in repository {}:\n{}", + tree_id, + storage_config.GitRoot().string(), + std::move(in_git_cas).error()); + } + else if (*in_git_cas) { return storage_config.GitRoot(); } // check the known repositories for (auto const& path : serve_config.known_repositories) { - if (IsTreeInRepo(tree_id, path, logger)) { + auto in_repo = GitRepo::IsTreeInRepo(path, tree_id); + if (not in_repo.has_value()) { + logger->Emit(LogLevel::Info, + "ServeTarget: While checking existence of " + "tree {} in repository {}:\n{}", + tree_id, + path.string(), + std::move(in_repo).error()); + } + else if (*in_repo) { return path; } } -- cgit v1.2.3