diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-05-21 16:21:29 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-05-23 15:03:41 +0200 |
commit | af9a4c74e28d188e610f345065a9c78bb81ba9b2 (patch) | |
tree | 9d50a9154a29f2dfc798921e140f2d6870a97e28 /src/buildtool/execution_api/git/git_api.hpp | |
parent | cc24ac99155345e61fa8d08de91be13bb31b5f6f (diff) | |
download | justbuild-af9a4c74e28d188e610f345065a9c78bb81ba9b2.tar.gz |
Execution APIs: Extract common implementation into separate library
This reduces the code duplication between the local and bazel APIs
and improves code maintainability.
Diffstat (limited to 'src/buildtool/execution_api/git/git_api.hpp')
-rw-r--r-- | src/buildtool/execution_api/git/git_api.hpp | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/buildtool/execution_api/git/git_api.hpp b/src/buildtool/execution_api/git/git_api.hpp index 56cd78ab..3bbbfd1f 100644 --- a/src/buildtool/execution_api/git/git_api.hpp +++ b/src/buildtool/execution_api/git/git_api.hpp @@ -25,6 +25,7 @@ #include "gsl/gsl" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" +#include "src/buildtool/execution_api/common/common_api.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" @@ -179,24 +180,23 @@ class GitApi final : public IExecutionApi { } // Determine missing artifacts in other CAS. - std::vector<ArtifactDigest> digests; - digests.reserve(artifacts_info.size()); - std::unordered_map<ArtifactDigest, Artifact::ObjectInfo> info_map; - for (auto const& info : artifacts_info) { - digests.emplace_back(info.digest); - info_map[info.digest] = info; - } - auto const& missing_digests = api->IsAvailable(digests); - std::vector<Artifact::ObjectInfo> missing_artifacts_info; - missing_artifacts_info.reserve(missing_digests.size()); - for (auto const& digest : missing_digests) { - missing_artifacts_info.emplace_back(info_map[digest]); + auto missing_artifacts_info = + GetMissingArtifactsInfo<Artifact::ObjectInfo>( + api, + artifacts_info.begin(), + artifacts_info.end(), + [](Artifact::ObjectInfo const& info) { return info.digest; }); + if (not missing_artifacts_info) { + Logger::Log(LogLevel::Error, + "GitApi: Failed to retrieve the missing artifacts"); + return false; } // Collect blobs of missing artifacts from local CAS. Trees are // processed recursively before any blob is uploaded. BlobContainer container{}; - for (auto const& info : missing_artifacts_info) { + for (auto const& dgst : missing_artifacts_info->digests) { + auto const& info = missing_artifacts_info->back_map[dgst]; std::optional<std::string> content; // Recursively process trees. if (IsTreeObject(info.type)) { |