summaryrefslogtreecommitdiff
path: root/src/buildtool/serve_api/serve_service/target_utils.cpp
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2025-01-13 15:19:08 +0100
committerMaksim Denisov <denisov.maksim@huawei.com>2025-01-15 16:43:56 +0100
commit484354347b508bc90c898067b4c23f8eccf2bfed (patch)
tree31a0c4d6dc8c72869fed6be7f70f3af474265ac4 /src/buildtool/serve_api/serve_service/target_utils.cpp
parent6a601b99e80d8b494eae690366e5333d596961e8 (diff)
downloadjustbuild-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.cpp47
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;
}
}