summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2024-07-05 17:27:13 +0200
committerMaksim Denisov <denisov.maksim@huawei.com>2024-07-22 17:01:13 +0200
commitdd23c6e397584f4bf1cf84a73d9c382a8ff81de7 (patch)
tree0f0f600a4674a03da42c07f4ea016ff3c2dc578e /src
parentbeb3faa6956b9bfd58d4ea6644a9b2987409aaba (diff)
downloadjustbuild-dd23c6e397584f4bf1cf84a73d9c382a8ff81de7.tar.gz
Pass HashFunction to ArtifactDigest::Create
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/build_engine/target_map/built_in_rules.cpp12
-rw-r--r--src/buildtool/build_engine/target_map/target_map.cpp7
-rw-r--r--src/buildtool/common/artifact_digest.hpp10
-rw-r--r--src/buildtool/execution_api/bazel_msg/TARGETS1
-rw-r--r--src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp10
-rw-r--r--src/buildtool/execution_api/common/tree_reader_utils.cpp4
-rw-r--r--src/buildtool/execution_api/git/TARGETS1
-rw-r--r--src/buildtool/execution_api/git/git_api.hpp9
-rw-r--r--src/buildtool/execution_api/local/TARGETS1
-rw-r--r--src/buildtool/execution_api/local/local_api.hpp7
-rw-r--r--src/buildtool/execution_api/local/local_response.hpp9
-rw-r--r--src/buildtool/execution_api/remote/TARGETS1
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp13
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_response.cpp20
-rw-r--r--src/buildtool/execution_engine/executor/TARGETS1
-rw-r--r--src/buildtool/execution_engine/executor/executor.hpp4
-rw-r--r--src/buildtool/file_system/TARGETS1
-rw-r--r--src/buildtool/file_system/object_cas.hpp6
-rw-r--r--src/buildtool/graph_traverser/TARGETS1
-rw-r--r--src/buildtool/graph_traverser/graph_traverser.hpp4
-rw-r--r--src/buildtool/storage/TARGETS2
-rw-r--r--src/buildtool/storage/compactifier.cpp3
-rw-r--r--src/buildtool/storage/config.hpp7
-rw-r--r--src/buildtool/storage/local_ac.tpp9
-rw-r--r--src/buildtool/storage/local_cas.tpp4
25 files changed, 96 insertions, 51 deletions
diff --git a/src/buildtool/build_engine/target_map/built_in_rules.cpp b/src/buildtool/build_engine/target_map/built_in_rules.cpp
index abcc9d40..538f1940 100644
--- a/src/buildtool/build_engine/target_map/built_in_rules.cpp
+++ b/src/buildtool/build_engine/target_map/built_in_rules.cpp
@@ -34,6 +34,7 @@
#include "src/buildtool/build_engine/target_map/utils.hpp"
#include "src/buildtool/common/artifact_description.hpp"
#include "src/buildtool/common/repository_config.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/utils/cpp/path.hpp"
#include "src/utils/cpp/vector.hpp"
@@ -267,11 +268,12 @@ void BlobGenRuleWithDeps(
return;
}
- auto stage = ExpressionPtr{Expression::map_t{
- name_val->String(),
- ExpressionPtr{ArtifactDescription::CreateKnown(
- ArtifactDigest::Create<ObjectType::File>(data_val->String()),
- blob_type)}}};
+ auto stage = ExpressionPtr{
+ Expression::map_t{name_val->String(),
+ ExpressionPtr{ArtifactDescription::CreateKnown(
+ ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), data_val->String()),
+ blob_type)}}};
auto analysis_result = std::make_shared<AnalysedTarget const>(
TargetResult{.artifact_stage = stage,
diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp
index 1c8d3743..0c970636 100644
--- a/src/buildtool/build_engine/target_map/target_map.cpp
+++ b/src/buildtool/build_engine/target_map/target_map.cpp
@@ -40,6 +40,7 @@
#include "src/buildtool/common/artifact_description.hpp"
#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/common/statistics.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/logging/logger.hpp"
#include "src/utils/cpp/gsl.hpp"
@@ -731,7 +732,8 @@ void withDependencies(
}
blobs.emplace_back(data->String());
return ExpressionPtr{ArtifactDescription::CreateKnown(
- ArtifactDigest::Create<ObjectType::File>(data->String()),
+ ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), data->String()),
ObjectType::File)};
}},
@@ -751,7 +753,8 @@ void withDependencies(
blobs.emplace_back(data->String());
return ExpressionPtr{ArtifactDescription::CreateKnown(
- ArtifactDigest::Create<ObjectType::Symlink>(data->String()),
+ ArtifactDigest::Create<ObjectType::Symlink>(
+ HashFunction::Instance(), data->String()),
ObjectType::Symlink)};
}},
diff --git a/src/buildtool/common/artifact_digest.hpp b/src/buildtool/common/artifact_digest.hpp
index 59299232..686a6fa5 100644
--- a/src/buildtool/common/artifact_digest.hpp
+++ b/src/buildtool/common/artifact_digest.hpp
@@ -74,17 +74,18 @@ class ArtifactDigest {
}
template <ObjectType kType>
- [[nodiscard]] static auto Create(std::string const& content) noexcept
+ [[nodiscard]] static auto Create(HashFunction hash_function,
+ std::string const& content) noexcept
-> ArtifactDigest {
if constexpr (kType == ObjectType::Tree) {
return ArtifactDigest{
- HashFunction::Instance().ComputeTreeHash(content).HexString(),
+ hash_function.ComputeTreeHash(content).HexString(),
content.size(),
/*is_tree=*/true};
}
else {
return ArtifactDigest{
- HashFunction::Instance().ComputeBlobHash(content).HexString(),
+ hash_function.ComputeBlobHash(content).HexString(),
content.size(),
/*is_tree=*/false};
}
@@ -92,10 +93,11 @@ class ArtifactDigest {
template <ObjectType kType>
[[nodiscard]] static auto CreateFromFile(
+ HashFunction hash_function,
std::filesystem::path const& path) noexcept
-> std::optional<ArtifactDigest> {
static constexpr bool kIsTree = IsTreeObject(kType);
- auto hash = HashFunction::Instance().ComputeHashFile(path, kIsTree);
+ auto hash = hash_function.ComputeHashFile(path, kIsTree);
if (hash) {
return ArtifactDigest{
hash->first.HexString(), hash->second, kIsTree};
diff --git a/src/buildtool/execution_api/bazel_msg/TARGETS b/src/buildtool/execution_api/bazel_msg/TARGETS
index cc14a0df..db495aa5 100644
--- a/src/buildtool/execution_api/bazel_msg/TARGETS
+++ b/src/buildtool/execution_api/bazel_msg/TARGETS
@@ -34,6 +34,7 @@
[ ["src/buildtool/compatibility", "compatibility"]
, ["src/utils/cpp", "hex_string"]
, ["src/buildtool/file_system", "file_system_manager"]
+ , ["src/buildtool/crypto", "hash_function"]
, ["src/buildtool/file_system", "git_repo"]
]
, "stage": ["src", "buildtool", "execution_api", "bazel_msg"]
diff --git a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp
index 48c8b062..155067fd 100644
--- a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp
+++ b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp
@@ -27,6 +27,7 @@
#include "src/buildtool/common/bazel_types.hpp"
#include "src/buildtool/compatibility/native_support.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/file_system/file_system_manager.hpp"
#include "src/buildtool/file_system/git_repo.hpp"
#include "src/utils/cpp/hex_string.hpp"
@@ -184,7 +185,8 @@ template <class T>
if (not content) {
return std::nullopt;
}
- auto digest = ArtifactDigest::Create<ObjectType::File>(*content);
+ auto digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), *content);
auto msg = CreateDirectoryNode(dir_name);
msg.set_allocated_digest(
@@ -223,7 +225,8 @@ template <class T>
if (not content) {
return std::nullopt;
}
- auto digest = ArtifactDigest::Create<ObjectType::File>(*content);
+ auto digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), *content);
return BazelBlob{digest, std::move(*content), /*is_exec=*/false};
}
@@ -259,7 +262,8 @@ template <class T>
if (not content) {
return std::nullopt;
}
- auto digest = ArtifactDigest::Create<ObjectType::File>(*content);
+ auto digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), *content);
return BazelBlob{digest, std::move(*content), /*is_exec=*/false};
}
diff --git a/src/buildtool/execution_api/common/tree_reader_utils.cpp b/src/buildtool/execution_api/common/tree_reader_utils.cpp
index 1ec7edc0..874d1884 100644
--- a/src/buildtool/execution_api/common/tree_reader_utils.cpp
+++ b/src/buildtool/execution_api/common/tree_reader_utils.cpp
@@ -19,6 +19,7 @@
#include "nlohmann/json.hpp"
#include "src/buildtool/common/artifact_digest.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/file_system/object_type.hpp"
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/logging/logger.hpp"
@@ -42,7 +43,8 @@ namespace {
[[nodiscard]] auto CreateObjectInfo(bazel_re::SymlinkNode const& node)
-> Artifact::ObjectInfo {
return Artifact::ObjectInfo{
- .digest = ArtifactDigest::Create<ObjectType::File>(node.target()),
+ .digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), node.target()),
.type = ObjectType::Symlink};
}
diff --git a/src/buildtool/execution_api/git/TARGETS b/src/buildtool/execution_api/git/TARGETS
index df3dfcdc..2c614f08 100644
--- a/src/buildtool/execution_api/git/TARGETS
+++ b/src/buildtool/execution_api/git/TARGETS
@@ -11,6 +11,7 @@
, ["src/buildtool/execution_api/common", "common_api"]
, ["src/buildtool/logging", "log_level"]
, ["src/buildtool/logging", "logging"]
+ , ["src/buildtool/crypto", "hash_function"]
]
, "stage": ["src", "buildtool", "execution_api", "git"]
}
diff --git a/src/buildtool/execution_api/git/git_api.hpp b/src/buildtool/execution_api/git/git_api.hpp
index a18bd71b..b6a30a9b 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/artifact_digest.hpp"
#include "src/buildtool/common/repository_config.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp"
#include "src/buildtool/execution_api/common/artifact_blob_container.hpp"
#include "src/buildtool/execution_api/common/common_api.hpp"
@@ -227,7 +228,7 @@ class GitApi final : public IExecutionApi {
return false;
}
auto digest = ArtifactDigest::Create<ObjectType::File>(
- *entry_content);
+ HashFunction::Instance(), *entry_content);
// Collect blob and upload to remote CAS if transfer
// size reached.
if (not UpdateContainerAndUpload<ArtifactDigest>(
@@ -258,8 +259,10 @@ class GitApi final : public IExecutionApi {
ArtifactDigest digest =
IsTreeObject(info.type)
- ? ArtifactDigest::Create<ObjectType::Tree>(*content)
- : ArtifactDigest::Create<ObjectType::File>(*content);
+ ? ArtifactDigest::Create<ObjectType::Tree>(
+ HashFunction::Instance(), *content)
+ : ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), *content);
// Collect blob and upload to remote CAS if transfer size reached.
if (not UpdateContainerAndUpload<ArtifactDigest>(
diff --git a/src/buildtool/execution_api/local/TARGETS b/src/buildtool/execution_api/local/TARGETS
index 53b7f717..682c8624 100644
--- a/src/buildtool/execution_api/local/TARGETS
+++ b/src/buildtool/execution_api/local/TARGETS
@@ -42,6 +42,7 @@
, ["src/buildtool/execution_api/execution_service", "cas_utils"]
, ["src/buildtool/file_system", "git_repo"]
, ["src/utils/cpp", "tmp_dir"]
+ , ["src/buildtool/crypto", "hash_function"]
]
, "stage": ["src", "buildtool", "execution_api", "local"]
, "private-deps":
diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp
index 5f8fb6a4..e8ba0831 100644
--- a/src/buildtool/execution_api/local/local_api.hpp
+++ b/src/buildtool/execution_api/local/local_api.hpp
@@ -34,6 +34,7 @@
#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/compatibility/compatibility.hpp"
#include "src/buildtool/compatibility/native_support.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp"
#include "src/buildtool/execution_api/common/artifact_blob_container.hpp"
#include "src/buildtool/execution_api/common/blob_tree.hpp"
@@ -214,8 +215,10 @@ class LocalApi final : public IExecutionApi {
// storage_.ReadTreeInfos() will contain 0 as size.
ArtifactDigest digest =
IsTreeObject(info.type)
- ? ArtifactDigest::Create<ObjectType::Tree>(*content)
- : ArtifactDigest::Create<ObjectType::File>(*content);
+ ? ArtifactDigest::Create<ObjectType::Tree>(
+ HashFunction::Instance(), *content)
+ : ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), *content);
// Collect blob and upload to remote CAS if transfer size reached.
if (not UpdateContainerAndUpload<ArtifactDigest>(
diff --git a/src/buildtool/execution_api/local/local_response.hpp b/src/buildtool/execution_api/local/local_response.hpp
index 30d47ca7..c6214320 100644
--- a/src/buildtool/execution_api/local/local_response.hpp
+++ b/src/buildtool/execution_api/local/local_response.hpp
@@ -20,6 +20,7 @@
#include <utility>
#include "gsl/gsl"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/execution_api/common/execution_response.hpp"
#include "src/buildtool/execution_api/local/local_action.hpp"
#include "src/buildtool/file_system/file_system_manager.hpp"
@@ -139,7 +140,7 @@ class LocalResponse final : public IExecutionResponse {
link.path(),
Artifact::ObjectInfo{
.digest = ArtifactDigest::Create<ObjectType::File>(
- link.target()),
+ HashFunction::Instance(), link.target()),
.type = ObjectType::Symlink});
} catch (...) {
return false;
@@ -151,7 +152,7 @@ class LocalResponse final : public IExecutionResponse {
link.path(),
Artifact::ObjectInfo{
.digest = ArtifactDigest::Create<ObjectType::File>(
- link.target()),
+ HashFunction::Instance(), link.target()),
.type = ObjectType::Symlink});
dir_symlinks.emplace(link.path()); // add it to set
} catch (...) {
@@ -166,7 +167,7 @@ class LocalResponse final : public IExecutionResponse {
link.path(),
Artifact::ObjectInfo{
.digest = ArtifactDigest::Create<ObjectType::File>(
- link.target()),
+ HashFunction::Instance(), link.target()),
.type = ObjectType::Symlink});
} catch (...) {
return false;
@@ -178,7 +179,7 @@ class LocalResponse final : public IExecutionResponse {
link.path(),
Artifact::ObjectInfo{
.digest = ArtifactDigest::Create<ObjectType::File>(
- link.target()),
+ HashFunction::Instance(), link.target()),
.type = ObjectType::Symlink});
} catch (...) {
return false;
diff --git a/src/buildtool/execution_api/remote/TARGETS b/src/buildtool/execution_api/remote/TARGETS
index ad4093f3..e45af2f1 100644
--- a/src/buildtool/execution_api/remote/TARGETS
+++ b/src/buildtool/execution_api/remote/TARGETS
@@ -56,7 +56,6 @@
, ["@", "grpc", "", "grpc++"]
, ["src/buildtool/common/remote", "retry"]
, ["src/buildtool/execution_api/common", "message_limits"]
- , ["src/buildtool/crypto", "hash_function"]
, ["src/utils/cpp", "path"]
]
}
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp
index 4547ff8c..135cfd52 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp
@@ -138,9 +138,10 @@ auto BazelNetworkReader::MakeAuxiliaryMap(
result.reserve(full_tree.size());
for (auto& dir : full_tree) {
try {
- result.emplace(ArtifactDigest::Create<ObjectType::File>(
- dir.SerializeAsString()),
- std::move(dir));
+ result.emplace(
+ ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), dir.SerializeAsString()),
+ std::move(dir));
} catch (...) {
return std::nullopt;
}
@@ -191,8 +192,10 @@ auto BazelNetworkReader::BatchReadBlobs(
auto BazelNetworkReader::Validate(BazelBlob const& blob) noexcept -> bool {
ArtifactDigest const rehashed_digest =
NativeSupport::IsTree(blob.digest.hash())
- ? ArtifactDigest::Create<ObjectType::Tree>(*blob.data)
- : ArtifactDigest::Create<ObjectType::File>(*blob.data);
+ ? ArtifactDigest::Create<ObjectType::Tree>(HashFunction::Instance(),
+ *blob.data)
+ : ArtifactDigest::Create<ObjectType::File>(HashFunction::Instance(),
+ *blob.data);
if (rehashed_digest == ArtifactDigest{blob.digest}) {
return true;
}
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp
index 1b7682bd..0cb860a3 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp
@@ -18,6 +18,7 @@
#include "gsl/gsl"
#include "src/buildtool/compatibility/native_support.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp"
#include "src/buildtool/execution_api/common/common_api.hpp"
#include "src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp"
@@ -30,7 +31,8 @@ namespace {
auto ProcessDirectoryMessage(bazel_re::Directory const& dir) noexcept
-> std::optional<BazelBlob> {
auto data = dir.SerializeAsString();
- auto digest = ArtifactDigest::Create<ObjectType::File>(data);
+ auto digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), data);
return BazelBlob{std::move(digest), std::move(data), /*is_exec=*/false};
}
@@ -99,8 +101,8 @@ auto BazelResponse::Populate() noexcept -> bool {
artifacts.emplace(
link.path(),
Artifact::ObjectInfo{
- .digest =
- ArtifactDigest::Create<ObjectType::File>(link.target()),
+ .digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), link.target()),
.type = ObjectType::Symlink});
} catch (...) {
return false;
@@ -111,8 +113,8 @@ auto BazelResponse::Populate() noexcept -> bool {
artifacts.emplace(
link.path(),
Artifact::ObjectInfo{
- .digest =
- ArtifactDigest::Create<ObjectType::File>(link.target()),
+ .digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), link.target()),
.type = ObjectType::Symlink});
dir_symlinks.emplace(link.path()); // add it to set
} catch (...) {
@@ -126,8 +128,8 @@ auto BazelResponse::Populate() noexcept -> bool {
artifacts.emplace(
link.path(),
Artifact::ObjectInfo{
- .digest =
- ArtifactDigest::Create<ObjectType::File>(link.target()),
+ .digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), link.target()),
.type = ObjectType::Symlink});
} catch (...) {
return false;
@@ -138,8 +140,8 @@ auto BazelResponse::Populate() noexcept -> bool {
artifacts.emplace(
link.path(),
Artifact::ObjectInfo{
- .digest =
- ArtifactDigest::Create<ObjectType::File>(link.target()),
+ .digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), link.target()),
.type = ObjectType::Symlink});
} catch (...) {
return false;
diff --git a/src/buildtool/execution_engine/executor/TARGETS b/src/buildtool/execution_engine/executor/TARGETS
index 2956b33f..ecba14f0 100644
--- a/src/buildtool/execution_engine/executor/TARGETS
+++ b/src/buildtool/execution_engine/executor/TARGETS
@@ -22,6 +22,7 @@
, ["@", "gsl", "", "gsl"]
, ["src/buildtool/common", "common"]
, ["src/buildtool/common/remote", "remote_common"]
+ , ["src/buildtool/crypto", "hash_function"]
]
, "stage": ["src", "buildtool", "execution_engine", "executor"]
}
diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp
index 0f0a09ec..d4d1f928 100644
--- a/src/buildtool/execution_engine/executor/executor.hpp
+++ b/src/buildtool/execution_engine/executor/executor.hpp
@@ -36,6 +36,7 @@
#include "src/buildtool/common/statistics.hpp"
#include "src/buildtool/common/tree.hpp"
#include "src/buildtool/compatibility/compatibility.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/execution_api/common/artifact_blob_container.hpp"
#include "src/buildtool/execution_api/common/common_api.hpp"
#include "src/buildtool/execution_api/common/execution_api.hpp"
@@ -456,7 +457,8 @@ class ExecutorImpl {
if (not content.has_value()) {
return std::nullopt;
}
- auto digest = ArtifactDigest::Create<ObjectType::File>(*content);
+ auto digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), *content);
if (not api.Upload(ArtifactBlobContainer{
{ArtifactBlob{digest,
std::move(*content),
diff --git a/src/buildtool/file_system/TARGETS b/src/buildtool/file_system/TARGETS
index 2d3198c5..b67ac0cf 100644
--- a/src/buildtool/file_system/TARGETS
+++ b/src/buildtool/file_system/TARGETS
@@ -28,6 +28,7 @@
, ["src/buildtool/common", "common"]
, ["src/buildtool/logging", "log_level"]
, ["src/buildtool/logging", "logging"]
+ , ["src/buildtool/crypto", "hash_function"]
]
, "stage": ["src", "buildtool", "file_system"]
}
diff --git a/src/buildtool/file_system/object_cas.hpp b/src/buildtool/file_system/object_cas.hpp
index aa521e07..122778b5 100644
--- a/src/buildtool/file_system/object_cas.hpp
+++ b/src/buildtool/file_system/object_cas.hpp
@@ -22,6 +22,7 @@
#include "src/buildtool/common/artifact_digest.hpp"
#include "src/buildtool/common/bazel_types.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/file_system/file_storage.hpp"
#include "src/buildtool/file_system/file_system_manager.hpp"
#include "src/buildtool/logging/log_level.hpp"
@@ -116,13 +117,14 @@ class ObjectCAS {
[[nodiscard]] static auto CreateDigest(std::string const& bytes) noexcept
-> std::optional<bazel_re::Digest> {
- return ArtifactDigest::Create<kType>(bytes);
+ return ArtifactDigest::Create<kType>(HashFunction::Instance(), bytes);
}
[[nodiscard]] static auto CreateDigest(
std::filesystem::path const& file_path) noexcept
-> std::optional<bazel_re::Digest> {
- return ArtifactDigest::CreateFromFile<kType>(file_path);
+ return ArtifactDigest::CreateFromFile<kType>(HashFunction::Instance(),
+ file_path);
}
[[nodiscard]] auto IsAvailable(
diff --git a/src/buildtool/graph_traverser/TARGETS b/src/buildtool/graph_traverser/TARGETS
index 0bb9a8e8..189159f2 100644
--- a/src/buildtool/graph_traverser/TARGETS
+++ b/src/buildtool/graph_traverser/TARGETS
@@ -25,6 +25,7 @@
, ["src/buildtool/logging", "log_level"]
, ["src/buildtool/logging", "logging"]
, ["src/buildtool/progress_reporting", "base_progress_reporter"]
+ , ["src/buildtool/crypto", "hash_function"]
]
, "stage": ["src", "buildtool", "graph_traverser"]
}
diff --git a/src/buildtool/graph_traverser/graph_traverser.hpp b/src/buildtool/graph_traverser/graph_traverser.hpp
index 9c2a2175..ae154c6a 100644
--- a/src/buildtool/graph_traverser/graph_traverser.hpp
+++ b/src/buildtool/graph_traverser/graph_traverser.hpp
@@ -37,6 +37,7 @@
#include "src/buildtool/common/repository_config.hpp"
#include "src/buildtool/common/statistics.hpp"
#include "src/buildtool/common/tree.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/execution_api/common/api_bundle.hpp"
#include "src/buildtool/execution_api/common/artifact_blob_container.hpp"
#include "src/buildtool/execution_api/common/common_api.hpp"
@@ -292,7 +293,8 @@ class GraphTraverser {
std::vector<std::string> const& blobs) const noexcept -> bool {
ArtifactBlobContainer container;
for (auto const& blob : blobs) {
- auto digest = ArtifactDigest::Create<ObjectType::File>(blob);
+ auto digest = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), blob);
Logger::Log(logger_, LogLevel::Trace, [&]() {
return fmt::format(
"Uploaded blob {}, its digest has id {} and size {}.",
diff --git a/src/buildtool/storage/TARGETS b/src/buildtool/storage/TARGETS
index 0b264aab..c5d1fb9c 100644
--- a/src/buildtool/storage/TARGETS
+++ b/src/buildtool/storage/TARGETS
@@ -15,6 +15,7 @@
, ["src/utils/cpp", "gsl"]
, ["src/utils/cpp", "tmp_dir"]
, ["src/utils/cpp", "expected"]
+ , ["src/buildtool/crypto", "hash_function"]
]
, "stage": ["src", "buildtool", "storage"]
}
@@ -81,6 +82,7 @@
, ["src/buildtool/file_system", "git_repo"]
, ["src/buildtool/common", "artifact_description"]
, ["src/buildtool/compatibility", "compatibility"]
+ , ["src/buildtool/crypto", "hash_function"]
]
, "stage": ["src", "buildtool", "storage"]
, "private-deps":
diff --git a/src/buildtool/storage/compactifier.cpp b/src/buildtool/storage/compactifier.cpp
index 34f17b67..916a131a 100644
--- a/src/buildtool/storage/compactifier.cpp
+++ b/src/buildtool/storage/compactifier.cpp
@@ -271,7 +271,8 @@ template <ObjectType kType>
}
// Calculate the digest for the entry:
- auto const digest = ArtifactDigest::CreateFromFile<kType>(path);
+ auto const digest =
+ ArtifactDigest::CreateFromFile<kType>(HashFunction::Instance(), path);
if (not digest) {
task.Log(LogLevel::Error,
"Failed to calculate digest for {}",
diff --git a/src/buildtool/storage/config.hpp b/src/buildtool/storage/config.hpp
index 4bc8911c..a6213074 100644
--- a/src/buildtool/storage/config.hpp
+++ b/src/buildtool/storage/config.hpp
@@ -27,6 +27,7 @@
#include "src/buildtool/common/artifact_digest.hpp"
#include "src/buildtool/common/remote/remote_common.hpp"
#include "src/buildtool/compatibility/compatibility.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/file_system/file_system_manager.hpp"
#include "src/buildtool/file_system/object_type.hpp"
#include "src/buildtool/logging/log_level.hpp"
@@ -157,6 +158,7 @@ struct StorageConfig final {
-> std::string {
try {
return ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(),
DescribeBackend(std::nullopt, {}, {}).value())
.hash();
} catch (...) {
@@ -219,8 +221,9 @@ class StorageConfig::Builder final {
auto desc = DescribeBackend(
remote_address_, remote_platform_properties_, remote_dispatch_);
if (desc) {
- backend_description_id =
- ArtifactDigest::Create<ObjectType::File>(*desc).hash();
+ backend_description_id = ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), *desc)
+ .hash();
}
else {
return unexpected{desc.error()};
diff --git a/src/buildtool/storage/local_ac.tpp b/src/buildtool/storage/local_ac.tpp
index 559346f5..c60e8751 100644
--- a/src/buildtool/storage/local_ac.tpp
+++ b/src/buildtool/storage/local_ac.tpp
@@ -18,6 +18,7 @@
#include <tuple> //std::ignore
#include "src/buildtool/common/bazel_types.hpp"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/storage/local_ac.hpp"
@@ -104,8 +105,8 @@ requires(kIsLocalGeneration) auto LocalAC<kDoGlobalUplink>::LocalUplinkEntry(
for (auto const& link : result->output_file_symlinks()) {
if (not cas_.LocalUplinkBlob(
latest.cas_,
- bazel_re::Digest(
- ArtifactDigest::Create<ObjectType::File>(link.target())),
+ bazel_re::Digest(ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), link.target())),
/*is_executable=*/false)) {
return false;
}
@@ -113,8 +114,8 @@ requires(kIsLocalGeneration) auto LocalAC<kDoGlobalUplink>::LocalUplinkEntry(
for (auto const& link : result->output_directory_symlinks()) {
if (not cas_.LocalUplinkBlob(
latest.cas_,
- bazel_re::Digest(
- ArtifactDigest::Create<ObjectType::File>(link.target())),
+ bazel_re::Digest(ArtifactDigest::Create<ObjectType::File>(
+ HashFunction::Instance(), link.target())),
/*is_executable=*/false)) {
return false;
}
diff --git a/src/buildtool/storage/local_cas.tpp b/src/buildtool/storage/local_cas.tpp
index 8bb04049..54807580 100644
--- a/src/buildtool/storage/local_cas.tpp
+++ b/src/buildtool/storage/local_cas.tpp
@@ -19,6 +19,7 @@
#include <utility> // std::move
#include "fmt/core.h"
+#include "src/buildtool/crypto/hash_function.hpp"
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/storage/local_cas.hpp"
@@ -374,7 +375,8 @@ auto LocalCAS<kDoGlobalUplink>::Splice(
// methods can refer to a file that existed before. The direct hash
// calculation is done instead.
auto const& file_path = large_object.GetPath();
- auto spliced_digest = ArtifactDigest::CreateFromFile<kType>(file_path);
+ auto spliced_digest = ArtifactDigest::CreateFromFile<kType>(
+ HashFunction::Instance(), file_path);
if (not spliced_digest) {
return unexpected{LargeObjectError{LargeObjectErrorCode::Internal,
"could not calculate digest"}};