diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2025-01-13 15:19:08 +0100 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2025-01-15 16:43:56 +0100 |
commit | 484354347b508bc90c898067b4c23f8eccf2bfed (patch) | |
tree | 31a0c4d6dc8c72869fed6be7f70f3af474265ac4 /src/buildtool/serve_api/serve_service/target_utils.cpp | |
parent | 6a601b99e80d8b494eae690366e5333d596961e8 (diff) | |
download | justbuild-484354347b508bc90c898067b4c23f8eccf2bfed.tar.gz |
Use GitRepo::IsTreeInRepo in target utils
Diffstat (limited to 'src/buildtool/serve_api/serve_service/target_utils.cpp')
-rw-r--r-- | src/buildtool/serve_api/serve_service/target_utils.cpp | 47 |
1 files changed, 20 insertions, 27 deletions
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<Logger> 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<GitRepo::anon_logger_t>( - [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<Logger> const& logger) -> std::optional<std::filesystem::path> { // 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; } } |