summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/execution_api/utils')
-rw-r--r--src/buildtool/execution_api/utils/TARGETS1
-rw-r--r--src/buildtool/execution_api/utils/rehash_utils.cpp27
-rw-r--r--src/buildtool/execution_api/utils/rehash_utils.hpp8
3 files changed, 31 insertions, 5 deletions
diff --git a/src/buildtool/execution_api/utils/TARGETS b/src/buildtool/execution_api/utils/TARGETS
index e54b63f6..abcb7470 100644
--- a/src/buildtool/execution_api/utils/TARGETS
+++ b/src/buildtool/execution_api/utils/TARGETS
@@ -38,6 +38,7 @@
, "srcs": ["rehash_utils.cpp"]
, "deps":
[ ["src/buildtool/common", "common"]
+ , ["src/buildtool/common", "config"]
, ["src/buildtool/file_system", "object_type"]
, ["src/buildtool/storage", "config"]
, ["src/utils/cpp", "expected"]
diff --git a/src/buildtool/execution_api/utils/rehash_utils.cpp b/src/buildtool/execution_api/utils/rehash_utils.cpp
index bbaefaeb..c5ca60c2 100644
--- a/src/buildtool/execution_api/utils/rehash_utils.cpp
+++ b/src/buildtool/execution_api/utils/rehash_utils.cpp
@@ -136,11 +136,11 @@ template <std::invocable<ArtifactDigest const&, ObjectType> TReadCallback>
[&target_storage](
std::variant<std::filesystem::path, std::string> const& data,
bool is_exec) -> std::optional<ArtifactDigest> {
- if (not std::holds_alternative<std::filesystem::path>(data)) {
- return std::nullopt;
- }
- return target_storage.CAS().StoreBlob(
- std::get<std::filesystem::path>(data), is_exec);
+ return std::visit(
+ [&target_storage, is_exec](auto const& d) {
+ return target_storage.CAS().StoreBlob(d, is_exec);
+ },
+ data);
};
BazelMsgFactory::TreeStoreFunc store_dir =
[&cas = target_storage.CAS()](std::string const& content) {
@@ -252,4 +252,21 @@ auto RehashDigest(std::vector<Artifact::ObjectInfo> const& digests,
/*from_git=*/false);
}
+auto RehashGitDigest(std::vector<Artifact::ObjectInfo> const& digests,
+ StorageConfig const& source_config,
+ StorageConfig const& target_config,
+ RepositoryConfig const& repo_config)
+ -> expected<std::vector<Artifact::ObjectInfo>, std::string> {
+ auto read = [&repo_config](
+ ArtifactDigest const& digest,
+ ObjectType /*type*/) -> std::optional<std::string> {
+ return repo_config.ReadBlobFromGitCAS(digest.hash());
+ };
+ return RehashDigestImpl(digests,
+ source_config,
+ target_config,
+ std::move(read),
+ /*from_git=*/true);
+}
+
} // namespace RehashUtils
diff --git a/src/buildtool/execution_api/utils/rehash_utils.hpp b/src/buildtool/execution_api/utils/rehash_utils.hpp
index e6b21874..7de1cc54 100644
--- a/src/buildtool/execution_api/utils/rehash_utils.hpp
+++ b/src/buildtool/execution_api/utils/rehash_utils.hpp
@@ -21,6 +21,7 @@
#include "src/buildtool/common/artifact.hpp"
#include "src/buildtool/common/artifact_digest.hpp"
+#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/file_system/object_type.hpp"
#include "src/buildtool/storage/config.hpp"
#include "src/utils/cpp/expected.hpp"
@@ -66,6 +67,13 @@ namespace RehashUtils {
StorageConfig const& target_config)
-> expected<std::vector<Artifact::ObjectInfo>, std::string>;
+[[nodiscard]] auto RehashGitDigest(
+ std::vector<Artifact::ObjectInfo> const& digests,
+ StorageConfig const& source_config,
+ StorageConfig const& target_config,
+ RepositoryConfig const& repo_config)
+ -> expected<std::vector<Artifact::ObjectInfo>, std::string>;
+
} // namespace RehashUtils
#endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_UTILS_REHASH_UTILS_HPP