summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/execution_api/execution_service/cas_utils.cpp3
-rw-r--r--src/buildtool/storage/local_cas.hpp4
-rw-r--r--src/buildtool/storage/local_cas.tpp30
3 files changed, 10 insertions, 27 deletions
diff --git a/src/buildtool/execution_api/execution_service/cas_utils.cpp b/src/buildtool/execution_api/execution_service/cas_utils.cpp
index 3e1f8002..a01cadc6 100644
--- a/src/buildtool/execution_api/execution_service/cas_utils.cpp
+++ b/src/buildtool/execution_api/execution_service/cas_utils.cpp
@@ -37,7 +37,8 @@ auto CASUtils::EnsureTreeInvariant(bazel_re::Digest const& digest,
std::string const& tree_data,
Storage const& storage) noexcept
-> std::optional<std::string> {
- auto error = storage.CAS().CheckTreeInvariant(digest, tree_data);
+ auto const a_digest = static_cast<ArtifactDigest>(digest);
+ auto error = storage.CAS().CheckTreeInvariant(a_digest, tree_data);
if (error) {
return std::move(*error).Message();
}
diff --git a/src/buildtool/storage/local_cas.hpp b/src/buildtool/storage/local_cas.hpp
index fccd6ea8..6c653009 100644
--- a/src/buildtool/storage/local_cas.hpp
+++ b/src/buildtool/storage/local_cas.hpp
@@ -208,7 +208,7 @@ class LocalCAS {
/// \param tree_digest Digest of the tree to be checked.
/// \param tree_data Content of the tree.
/// \return An error on fail.
- [[nodiscard]] auto CheckTreeInvariant(bazel_re::Digest const& tree_digest,
+ [[nodiscard]] auto CheckTreeInvariant(ArtifactDigest const& tree_digest,
std::string const& tree_data)
const noexcept -> std::optional<LargeObjectError>;
@@ -343,7 +343,7 @@ class LocalCAS {
#else
template <bool kDoGlobalUplink>
auto LocalCAS<kDoGlobalUplink>::CheckTreeInvariant(
- bazel_re::Digest const& tree_digest,
+ ArtifactDigest const& tree_digest,
std::string const& tree_data) const noexcept
-> std::optional<LargeObjectError> {
return std::nullopt;
diff --git a/src/buildtool/storage/local_cas.tpp b/src/buildtool/storage/local_cas.tpp
index 221470d7..cf1fd2d2 100644
--- a/src/buildtool/storage/local_cas.tpp
+++ b/src/buildtool/storage/local_cas.tpp
@@ -22,23 +22,6 @@
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/storage/local_cas.hpp"
-namespace detail {
-
-[[nodiscard]] static inline auto CheckDigestConsistency(
- bazel_re::Digest const& lhs,
- bazel_re::Digest const& rhs) noexcept -> bool {
- if (lhs.hash() != rhs.hash()) {
- return false;
- }
- bool const both_known = lhs.size_bytes() != 0 and rhs.size_bytes() != 0;
- if (Compatibility::IsCompatible() or both_known) {
- return lhs.size_bytes() == rhs.size_bytes();
- }
- return true;
-}
-
-} // namespace detail
-
template <bool kDoGlobalUplink>
template <bool kIsLocalGeneration>
requires(kIsLocalGeneration)
@@ -305,7 +288,7 @@ auto LocalCAS<kDoGlobalUplink>::TrySplice(
template <bool kDoGlobalUplink>
auto LocalCAS<kDoGlobalUplink>::CheckTreeInvariant(
- bazel_re::Digest const& tree_digest,
+ ArtifactDigest const& tree_digest,
std::string const& tree_data) const noexcept
-> std::optional<LargeObjectError> {
if (Compatibility::IsCompatible()) {
@@ -313,11 +296,10 @@ auto LocalCAS<kDoGlobalUplink>::CheckTreeInvariant(
}
auto skip_symlinks = [](auto const& /*unused*/) { return true; };
- auto const entries =
- GitRepo::ReadTreeData(tree_data,
- NativeSupport::Unprefix(tree_digest.hash()),
- skip_symlinks,
- /*is_hex_id=*/true);
+ auto const entries = GitRepo::ReadTreeData(tree_data,
+ tree_digest.hash(),
+ skip_symlinks,
+ /*is_hex_id=*/true);
if (not entries) {
return LargeObjectError{
LargeObjectErrorCode::Internal,
@@ -386,7 +368,7 @@ auto LocalCAS<kDoGlobalUplink>::Splice(ArtifactDigest const& digest,
"could not calculate digest"}};
}
- if (not detail::CheckDigestConsistency(*spliced_digest, digest)) {
+ if (*spliced_digest != digest) {
return unexpected{LargeObjectError{
LargeObjectErrorCode::InvalidResult,
fmt::format("actual result {} differs from the expected one {}",