summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/git/git_api.hpp
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-05-21 16:21:29 +0200
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-05-23 15:03:41 +0200
commitaf9a4c74e28d188e610f345065a9c78bb81ba9b2 (patch)
tree9d50a9154a29f2dfc798921e140f2d6870a97e28 /src/buildtool/execution_api/git/git_api.hpp
parentcc24ac99155345e61fa8d08de91be13bb31b5f6f (diff)
downloadjustbuild-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.hpp26
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)) {