diff options
author | Sascha Roloff <sascha.roloff@huawei.com> | 2022-10-13 11:39:13 +0200 |
---|---|---|
committer | Sascha Roloff <sascha.roloff@huawei.com> | 2022-10-14 12:46:42 +0200 |
commit | f7e4ebf0e2913ff1b987e40baab5c0c809e6c0de (patch) | |
tree | 09ae121b46743a7eb682d9ba1361a59566c558bc /src | |
parent | 4d53961509015534fa10a59f4b86a20ae8a66017 (diff) | |
download | justbuild-f7e4ebf0e2913ff1b987e40baab5c0c809e6c0de.tar.gz |
Remove default value of ArtifactDigest::Create template parameter
This enforces the explicit specification, which object type, either file or
tree, should be used to create an artifact digest. This also avoids subtile
errors at locations as in the previous commit, where files as well as trees are
supposed to be handled, but digest creation mistakenly defaults to file object
type.
Diffstat (limited to 'src')
9 files changed, 16 insertions, 13 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 bac1f5cd..a34dfb03 100644 --- a/src/buildtool/build_engine/target_map/built_in_rules.cpp +++ b/src/buildtool/build_engine/target_map/built_in_rules.cpp @@ -183,7 +183,8 @@ void FileGenRuleWithDeps( auto stage = ExpressionPtr{Expression::map_t{ file_name_val->String(), ExpressionPtr{ArtifactDescription{ - ArtifactDigest::Create(data_val->String()), ObjectType::File}}}}; + ArtifactDigest::Create<ObjectType::File>(data_val->String()), + ObjectType::File}}}}; auto vars_set = std::unordered_set<std::string>{}; vars_set.insert(param_vars->begin(), param_vars->end()); diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp index ac06250b..760e8306 100644 --- a/src/buildtool/build_engine/target_map/target_map.cpp +++ b/src/buildtool/build_engine/target_map/target_map.cpp @@ -582,7 +582,8 @@ void withDependencies( } blobs.emplace_back(data->String()); return ExpressionPtr{ArtifactDescription{ - ArtifactDigest::Create(data->String()), ObjectType::File}}; + ArtifactDigest::Create<ObjectType::File>(data->String()), + ObjectType::File}}; }}, {"TREE", [&trees](auto&& eval, auto const& expr, auto const& env) { diff --git a/src/buildtool/common/artifact_digest.hpp b/src/buildtool/common/artifact_digest.hpp index c9250cf9..11fab86d 100644 --- a/src/buildtool/common/artifact_digest.hpp +++ b/src/buildtool/common/artifact_digest.hpp @@ -70,7 +70,7 @@ class ArtifactDigest { return std::equal_to<bazel_re::Digest>{}(*this, other); } - template <ObjectType kType = ObjectType::File> + template <ObjectType kType> [[nodiscard]] static auto Create(std::string const& content) noexcept -> ArtifactDigest { if constexpr (kType == ObjectType::Tree) { diff --git a/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp b/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp index 524e2fc8..5e92a393 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp @@ -39,7 +39,8 @@ struct BazelBlob { if (not content.has_value()) { return std::nullopt; } - return BazelBlob{ArtifactDigest::Create(*content), *content}; + return BazelBlob{ArtifactDigest::Create<ObjectType::File>(*content), + *content}; } #endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_BAZEL_MSG_BAZEL_BLOB_HPP 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 da1d6554..a9022e55 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp @@ -274,7 +274,7 @@ template <class T> auto msg = CreateDirectoryNode(dir_name); auto content_creator = [&dir] { return SerializeMessage(dir); }; auto digest_creator = [](std::string const& content) -> bazel_re::Digest { - return ArtifactDigest::Create(content); + return ArtifactDigest::Create<ObjectType::File>(content); }; return DirectoryNodeBundle::Create(msg, content_creator, digest_creator); } @@ -305,7 +305,7 @@ template <class T> auto content_creator = [&msg] { return SerializeMessage(msg); }; auto digest_creator = [](std::string const& content) -> bazel_re::Digest { - return ArtifactDigest::Create(content); + return ArtifactDigest::Create<ObjectType::File>(content); }; return CommandBundle::Create(msg, content_creator, digest_creator); @@ -341,7 +341,7 @@ template <class T> auto content_creator = [&msg] { return SerializeMessage(msg); }; auto digest_creator = [](std::string const& content) -> bazel_re::Digest { - return ArtifactDigest::Create(content); + return ArtifactDigest::Create<ObjectType::File>(content); }; return ActionBundle::Create(msg, content_creator, digest_creator); diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp index 0252328b..5bf254e1 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp @@ -269,9 +269,9 @@ auto BazelNetwork::RecursivelyReadTreeLeafs( dir_map->reserve(dirs.size()); for (auto& dir : dirs) { try { - dir_map->emplace( - ArtifactDigest::Create(dir.SerializeAsString()), - std::move(dir)); + dir_map->emplace(ArtifactDigest::Create<ObjectType::File>( + dir.SerializeAsString()), + std::move(dir)); } catch (...) { return std::nullopt; } diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp index 97fae4f9..615c0177 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp @@ -24,7 +24,7 @@ namespace { auto ProcessDirectoryMessage(bazel_re::Directory const& dir) noexcept -> std::optional<BazelBlob> { auto data = dir.SerializeAsString(); - auto digest = ArtifactDigest::Create(data); + auto digest = ArtifactDigest::Create<ObjectType::File>(data); return BazelBlob{std::move(digest), std::move(data)}; } diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp index fc169200..ec280b01 100644 --- a/src/buildtool/execution_engine/executor/executor.hpp +++ b/src/buildtool/execution_engine/executor/executor.hpp @@ -382,7 +382,7 @@ class ExecutorImpl { if (not content.has_value()) { return std::nullopt; } - auto digest = ArtifactDigest::Create(*content); + auto digest = ArtifactDigest::Create<ObjectType::File>(*content); if (not api->Upload( BlobContainer{{BazelBlob{digest, std::move(*content)}}})) { return std::nullopt; diff --git a/src/buildtool/graph_traverser/graph_traverser.hpp b/src/buildtool/graph_traverser/graph_traverser.hpp index 916932fd..063c1b85 100644 --- a/src/buildtool/graph_traverser/graph_traverser.hpp +++ b/src/buildtool/graph_traverser/graph_traverser.hpp @@ -284,7 +284,7 @@ class GraphTraverser { std::vector<std::string> const& blobs) const noexcept -> bool { BlobContainer container; for (auto const& blob : blobs) { - auto digest = ArtifactDigest::Create(blob); + auto digest = ArtifactDigest::Create<ObjectType::File>(blob); Logger::Log(LogLevel::Trace, [&]() { return fmt::format( "Uploaded blob {}, its digest has id {} and size {}.", |