diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2024-09-10 18:51:20 +0200 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2024-09-13 14:41:00 +0200 |
commit | f60d39620b29aeaf1addeb244bdd6e15ddf4894c (patch) | |
tree | 2617d65884c975b3fc63dd48e58242ec36138246 | |
parent | ed8f24fb246142ffaa88707ae86b53c34df82986 (diff) | |
download | justbuild-f60d39620b29aeaf1addeb244bdd6e15ddf4894c.tar.gz |
Rename Compatibility class to ProtocolTraits
...and move it to the common stage.
77 files changed, 261 insertions, 223 deletions
diff --git a/src/buildtool/common/TARGETS b/src/buildtool/common/TARGETS index e20f2996..1f280d78 100644 --- a/src/buildtool/common/TARGETS +++ b/src/buildtool/common/TARGETS @@ -20,7 +20,7 @@ [ "clidefaults" , "retry_cli" , ["src/buildtool/build_engine/expression", "expression"] - , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] , ["src/buildtool/main", "build_utils"] @@ -192,4 +192,10 @@ ] , "stage": ["src", "buildtool", "common"] } +, "protocol_traits": + { "type": ["@", "rules", "CC", "library"] + , "name": ["protocol_traits"] + , "hdrs": ["protocol_traits.hpp"] + , "stage": ["src", "buildtool", "common"] + } } diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp index 79beaadb..c388879e 100644 --- a/src/buildtool/common/cli.hpp +++ b/src/buildtool/common/cli.hpp @@ -32,8 +32,8 @@ #include "nlohmann/json.hpp" #include "src/buildtool/build_engine/expression/evaluator.hpp" #include "src/buildtool/common/clidefaults.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/retry_cli.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/main/build_utils.hpp" #include "src/utils/cpp/path.hpp" @@ -686,7 +686,7 @@ static inline auto SetupCompatibilityArguments( gsl::not_null<CLI::App*> const& app) { app->add_flag_function( "--compatible", - [](auto /*unused*/) { Compatibility::SetCompatible(); }, + [](auto /*unused*/) { ProtocolTraits::Instance().SetCompatible(); }, "At increased computational effort, be compatible with the original " "remote build execution protocol. As the change affects identifiers, " "the flag must be used consistently for all related invocations."); diff --git a/src/buildtool/compatibility/compatibility.hpp b/src/buildtool/common/protocol_traits.hpp index 5e6b6703..49850233 100644 --- a/src/buildtool/compatibility/compatibility.hpp +++ b/src/buildtool/common/protocol_traits.hpp @@ -12,23 +12,21 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef INCLUDED_SRC_BUILDTOOL_COMPATIBILITY_COMPATIBILITY_HPP -#define INCLUDED_SRC_BUILDTOOL_COMPATIBILITY_COMPATIBILITY_HPP +#ifndef INCLUDED_SRC_BUILDTOOL_COMMON_PROTOCOL_TRAITS_HPP +#define INCLUDED_SRC_BUILDTOOL_COMMON_PROTOCOL_TRAITS_HPP -class Compatibility final { +class ProtocolTraits final { public: - [[nodiscard]] static auto Instance() noexcept -> Compatibility& { - static Compatibility instance{}; + [[nodiscard]] static auto Instance() noexcept -> ProtocolTraits& { + static ProtocolTraits instance{}; return instance; } - [[nodiscard]] static auto IsCompatible() noexcept -> bool { - return Instance().compatible_; - } - static void SetCompatible(bool value = true) noexcept { - Instance().compatible_ = value; + [[nodiscard]] auto IsCompatible() const noexcept -> bool { + return compatible_; } + void SetCompatible(bool value = true) noexcept { compatible_ = value; } private: bool compatible_ = false; }; -#endif // INCLUDED_SRC_BUILDTOOL_COMPATIBILITY_COMPATIBILITY_HPP +#endif // INCLUDED_SRC_BUILDTOOL_COMMON_PROTOCOL_TRAITS_HPP diff --git a/src/buildtool/compatibility/TARGETS b/src/buildtool/compatibility/TARGETS deleted file mode 100644 index 1bb56609..00000000 --- a/src/buildtool/compatibility/TARGETS +++ /dev/null @@ -1,7 +0,0 @@ -{ "compatibility": - { "type": ["@", "rules", "CC", "library"] - , "name": ["compatibility"] - , "hdrs": ["compatibility.hpp"] - , "stage": ["src", "buildtool", "compatibility"] - } -} diff --git a/src/buildtool/execution_api/common/TARGETS b/src/buildtool/execution_api/common/TARGETS index 4c9cfa81..b417e26a 100644 --- a/src/buildtool/execution_api/common/TARGETS +++ b/src/buildtool/execution_api/common/TARGETS @@ -15,6 +15,7 @@ [ "artifact_blob_container" , ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "common"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/crypto", "hash_function"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg_factory"] , ["src/buildtool/file_system", "file_system_manager"] diff --git a/src/buildtool/execution_api/common/stream_dumper.hpp b/src/buildtool/execution_api/common/stream_dumper.hpp index 81d3bf35..ea0a323d 100644 --- a/src/buildtool/execution_api/common/stream_dumper.hpp +++ b/src/buildtool/execution_api/common/stream_dumper.hpp @@ -22,7 +22,7 @@ #include "gsl/gsl" #include "src/buildtool/common/artifact.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/execution_api/common/tree_reader_utils.hpp" #include "src/buildtool/file_system/object_type.hpp" @@ -65,7 +65,7 @@ class StreamDumper final { [[nodiscard]] auto DumpTree( Artifact::ObjectInfo const& info, gsl::not_null<FILE*> const& stream) const noexcept -> bool { - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { auto directory = impl_.ReadDirectory(info.digest); auto data = directory ? TreeReaderUtils::DirectoryToString(*directory) diff --git a/src/buildtool/execution_api/common/tree_reader.hpp b/src/buildtool/execution_api/common/tree_reader.hpp index d9048e1f..18e94fe8 100644 --- a/src/buildtool/execution_api/common/tree_reader.hpp +++ b/src/buildtool/execution_api/common/tree_reader.hpp @@ -23,6 +23,7 @@ #include "src/buildtool/common/artifact.hpp" #include "src/buildtool/common/bazel_types.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/execution_api/common/tree_reader_utils.hpp" #include "src/buildtool/file_system/git_repo.hpp" #include "src/buildtool/file_system/object_type.hpp" @@ -58,7 +59,7 @@ class TreeReader final { return true; }; - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { auto tree = impl_.ReadDirectory(digest); if (tree and not TreeReaderUtils::ReadObjectInfos(*tree, store_info)) { @@ -131,7 +132,7 @@ class TreeReader final { : store(parent / path, info); }; - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { if (auto tree = impl_.ReadDirectory(digest)) { if (include_trees and IsDirectoryEmpty(*tree)) { if (not store(parent, {digest, ObjectType::Tree})) { diff --git a/src/buildtool/execution_api/execution_service/TARGETS b/src/buildtool/execution_api/execution_service/TARGETS index cfb845b3..97d70528 100644 --- a/src/buildtool/execution_api/execution_service/TARGETS +++ b/src/buildtool/execution_api/execution_service/TARGETS @@ -25,6 +25,7 @@ , ["src/buildtool/execution_api/local", "local"] , ["src/buildtool/common", "common"] , ["src/buildtool/common", "artifact_digest_factory"] + , ["src/buildtool/common", "protocol_traits"] ] , "private-ldflags": ["-pthread", "-Wl,--whole-archive,-lpthread,--no-whole-archive"] @@ -66,7 +67,7 @@ , ["src/buildtool/storage", "config"] ] , "private-deps": - [ ["src/buildtool/compatibility", "compatibility"] + [ ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/common", "common"] , ["src/buildtool/common", "artifact_digest_factory"] , ["src/buildtool/logging", "log_level"] @@ -97,7 +98,7 @@ , ["@", "json", "", "json"] , ["@", "grpc", "", "grpc++"] , ["@", "fmt", "", "fmt"] - , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/common/remote", "port"] ] } @@ -138,7 +139,7 @@ , "private-deps": [ ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] - , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/common", "protocol_traits"] ] } , "operation_cache": diff --git a/src/buildtool/execution_api/execution_service/capabilities_server.cpp b/src/buildtool/execution_api/execution_service/capabilities_server.cpp index d8ba4279..c4ec6b06 100644 --- a/src/buildtool/execution_api/execution_service/capabilities_server.cpp +++ b/src/buildtool/execution_api/execution_service/capabilities_server.cpp @@ -16,7 +16,7 @@ #include <cstddef> -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" @@ -25,7 +25,7 @@ auto CapabilitiesServiceImpl::GetCapabilities( const ::bazel_re::GetCapabilitiesRequest* /*request*/, ::bazel_re::ServerCapabilities* response) -> ::grpc::Status { - if (not Compatibility::IsCompatible()) { + if (not ProtocolTraits::Instance().IsCompatible()) { auto const* str = "GetCapabilities not implemented"; Logger::Log(LogLevel::Error, str); return ::grpc::Status{grpc::StatusCode::UNIMPLEMENTED, str}; diff --git a/src/buildtool/execution_api/execution_service/cas_server.cpp b/src/buildtool/execution_api/execution_service/cas_server.cpp index 337eed84..5394b985 100644 --- a/src/buildtool/execution_api/execution_service/cas_server.cpp +++ b/src/buildtool/execution_api/execution_service/cas_server.cpp @@ -25,7 +25,7 @@ #include "fmt/core.h" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/execution_api/execution_service/cas_utils.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/storage/garbage_collector.hpp" @@ -54,7 +54,7 @@ namespace { bool valid = ref.hash() == computed.hash(); if (valid) { bool const check_sizes = - Compatibility::IsCompatible() or ref.size() != 0; + ProtocolTraits::Instance().IsCompatible() or ref.size() != 0; if (check_sizes) { valid = ref.size() == computed.size(); } diff --git a/src/buildtool/execution_api/execution_service/execution_server.cpp b/src/buildtool/execution_api/execution_service/execution_server.cpp index a213c552..6e3c77ab 100644 --- a/src/buildtool/execution_api/execution_service/execution_server.cpp +++ b/src/buildtool/execution_api/execution_service/execution_server.cpp @@ -276,7 +276,7 @@ namespace { ::bazel_re::OutputDirectory out_dir{}; *(out_dir.mutable_path()) = std::move(path); - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { // In compatible mode: Create a tree digest from directory // digest on the fly and set tree digest. LocalCasReader reader(&storage.CAS()); @@ -410,7 +410,7 @@ namespace { return unexpected{input_root_digest.error()}; } auto const input_root_path = - Compatibility::IsCompatible() + ProtocolTraits::Instance().IsCompatible() ? storage.CAS().BlobPath(*input_root_digest, /*is_executable=*/false) : storage.CAS().TreePath(*input_root_digest); diff --git a/src/buildtool/execution_api/execution_service/server_implementation.cpp b/src/buildtool/execution_api/execution_service/server_implementation.cpp index 81eabe01..e6ad463c 100644 --- a/src/buildtool/execution_api/execution_service/server_implementation.cpp +++ b/src/buildtool/execution_api/execution_service/server_implementation.cpp @@ -26,8 +26,8 @@ #include "fmt/core.h" #include "grpcpp/grpcpp.h" #include "nlohmann/json.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/port.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/execution_api/execution_service/ac_server.hpp" #include "src/buildtool/execution_api/execution_service/bytestream_server.hpp" #include "src/buildtool/execution_api/execution_service/capabilities_server.hpp" @@ -141,10 +141,12 @@ auto ServerImpl::Run(gsl::not_null<LocalContext const*> const& local_context, } auto const& info_str = nlohmann::to_string(info); - Logger::Log(LogLevel::Info, - fmt::format("{}execution service started: {}", - Compatibility::IsCompatible() ? "compatible " : "", - info_str)); + Logger::Log( + LogLevel::Info, + fmt::format( + "{}execution service started: {}", + ProtocolTraits::Instance().IsCompatible() ? "compatible " : "", + info_str)); if (not info_file_.empty()) { if (not TryWrite(info_file_, info_str)) { diff --git a/src/buildtool/execution_api/local/TARGETS b/src/buildtool/execution_api/local/TARGETS index 32d04697..66a57f21 100644 --- a/src/buildtool/execution_api/local/TARGETS +++ b/src/buildtool/execution_api/local/TARGETS @@ -30,6 +30,7 @@ , ["src/buildtool/common", "bazel_types"] , ["src/buildtool/common", "artifact_digest_factory"] , ["src/buildtool/common", "config"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/storage", "storage"] , ["src/buildtool/execution_api/common", "common"] , ["src/buildtool/execution_api/common", "artifact_blob_container"] @@ -37,7 +38,6 @@ , ["src/buildtool/execution_api/bazel_msg", "bazel_msg_factory"] , ["src/buildtool/execution_api/git", "git"] , ["src/buildtool/file_system", "file_system_manager"] - , ["src/buildtool/compatibility", "compatibility"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] diff --git a/src/buildtool/execution_api/local/local_action.cpp b/src/buildtool/execution_api/local/local_action.cpp index 97507d35..701acea4 100644 --- a/src/buildtool/execution_api/local/local_action.cpp +++ b/src/buildtool/execution_api/local/local_action.cpp @@ -70,7 +70,7 @@ class BuildCleanupAnchor { [&cas](std::string const& content) -> std::optional<ArtifactDigest> { return cas.StoreBlob(content); }; - return Compatibility::IsCompatible() + return ProtocolTraits::Instance().IsCompatible() ? BazelMsgFactory::CreateDirectoryDigestFromLocalTree( dir_path, store_blob, store_tree, store_symlink) : BazelMsgFactory::CreateGitTreeDigestFromLocalTree( diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp index b3e7808d..75f2d578 100644 --- a/src/buildtool/execution_api/local/local_api.hpp +++ b/src/buildtool/execution_api/local/local_api.hpp @@ -32,8 +32,8 @@ #include "gsl/gsl" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/repository_config.hpp" -#include "src/buildtool/compatibility/compatibility.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" @@ -284,7 +284,7 @@ class LocalApi final : public IExecutionApi { return std::nullopt; } - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { return CommonUploadTreeCompatible( *this, *build_root, @@ -383,7 +383,8 @@ class LocalApi final : public IExecutionApi { [[nodiscard]] static auto CreateFallbackApi( RepositoryConfig const* repo_config) noexcept -> std::optional<GitApi> { - if (repo_config == nullptr or Compatibility::IsCompatible()) { + if (repo_config == nullptr or + ProtocolTraits::Instance().IsCompatible()) { return std::nullopt; } return GitApi{repo_config}; diff --git a/src/buildtool/execution_api/remote/TARGETS b/src/buildtool/execution_api/remote/TARGETS index 41079f33..ae67146d 100644 --- a/src/buildtool/execution_api/remote/TARGETS +++ b/src/buildtool/execution_api/remote/TARGETS @@ -50,13 +50,12 @@ , "private-deps": [ ["src/buildtool/common", "artifact_digest_factory"] , ["src/buildtool/common", "bazel_digest_factory"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/file_system", "file_system_manager"] , ["src/buildtool/file_system", "object_type"] - , ["src/buildtool/compatibility", "compatibility"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg_factory"] , ["src/buildtool/execution_api/common", "common_api"] , ["src/buildtool/execution_api/utils", "outputscheck"] - , ["src/buildtool/compatibility", "compatibility"] , ["@", "grpc", "", "grpc++"] , ["src/buildtool/common/remote", "retry"] , ["src/buildtool/execution_api/common", "message_limits"] @@ -84,7 +83,6 @@ [ "bazel_network" , ["@", "fmt", "", "fmt"] , ["src/buildtool/auth", "auth"] - , ["src/buildtool/compatibility", "compatibility"] , ["src/buildtool/multithreading", "task_system"] , ["src/buildtool/execution_api/common", "common"] , ["src/buildtool/execution_api/common", "artifact_blob_container"] @@ -94,6 +92,7 @@ , ["src/buildtool/storage", "fs_utils"] , ["src/buildtool/crypto", "hash_function"] , ["src/buildtool/common", "artifact_digest_factory"] + , ["src/buildtool/common", "protocol_traits"] ] } , "config": diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp index e36bf942..d0e96292 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -29,7 +29,7 @@ #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" #include "src/buildtool/common/bazel_types.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_common.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" @@ -527,7 +527,7 @@ auto BazelApi::CreateAction( return std::nullopt; } - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { return CommonUploadTreeCompatible( *this, *build_root, diff --git a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp index 130012e7..3d08825e 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp @@ -24,10 +24,10 @@ #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/bazel_digest_factory.hpp" #include "src/buildtool/common/bazel_types.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/client_common.hpp" #include "src/buildtool/common/remote/retry.hpp" #include "src/buildtool/common/remote/retry_config.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/execution_common.hpp" #include "src/buildtool/execution_api/common/message_limits.hpp" @@ -54,7 +54,7 @@ namespace { stub) noexcept -> bool { // Create empty blob. std::string empty_str{}; - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; auto const digest = BazelDigestFactory::HashDataAs<ObjectType::File>( @@ -120,7 +120,7 @@ namespace { stub) noexcept -> bool { // Create empty blob. std::string empty_str{}; - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; auto const digest = BazelDigestFactory::HashDataAs<ObjectType::File>( 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 02f189d0..4b411d91 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp @@ -40,7 +40,7 @@ BazelNetworkReader::BazelNetworkReader( : instance_name_{other.instance_name_}, cas_{other.cas_}, hash_function_{other.hash_function_} { - if (Compatibility::IsCompatible() and request_remote_tree) { + if (ProtocolTraits::Instance().IsCompatible() and request_remote_tree) { // Query full tree from remote CAS. Note that this is currently not // supported by Buildbarn revision c3c06bbe2a. auto full_tree = diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp index ec76061c..cb481e3e 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp @@ -135,7 +135,7 @@ void BazelResponse::Populate() noexcept { } } - if (not Compatibility::IsCompatible()) { + if (not ProtocolTraits::Instance().IsCompatible()) { // in native mode: just collect and store tree digests for (auto const& tree : action_result.output_directories()) { auto digest = diff --git a/src/buildtool/execution_api/utils/TARGETS b/src/buildtool/execution_api/utils/TARGETS index b202a9ea..cc30421d 100644 --- a/src/buildtool/execution_api/utils/TARGETS +++ b/src/buildtool/execution_api/utils/TARGETS @@ -8,7 +8,7 @@ , ["src/buildtool/execution_api/common", "common"] ] , "private-deps": - [ ["src/buildtool/compatibility", "compatibility"] + [ ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg_factory"] , ["src/buildtool/logging", "logging"] , ["src/buildtool/crypto", "hash_function"] diff --git a/src/buildtool/execution_api/utils/subobject.cpp b/src/buildtool/execution_api/utils/subobject.cpp index 380fe65f..e2c6b256 100644 --- a/src/buildtool/execution_api/utils/subobject.cpp +++ b/src/buildtool/execution_api/utils/subobject.cpp @@ -15,7 +15,7 @@ #include "src/buildtool/execution_api/utils/subobject.hpp" #ifndef BOOTSTRAP_BUILD_TOOL -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.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/tree_reader_utils.hpp" @@ -43,7 +43,7 @@ auto RetrieveSubPathId(Artifact::ObjectInfo object_info, sofar.string()); return std::nullopt; } - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { auto directory = BazelMsgFactory::MessageFromString<bazel_re::Directory>(*data); if (not directory) { diff --git a/src/buildtool/execution_engine/executor/TARGETS b/src/buildtool/execution_engine/executor/TARGETS index f24030b2..eabbb371 100644 --- a/src/buildtool/execution_engine/executor/TARGETS +++ b/src/buildtool/execution_engine/executor/TARGETS @@ -9,7 +9,7 @@ , ["src/buildtool/common", "common"] , ["src/buildtool/common", "artifact_digest_factory"] , ["src/buildtool/common", "tree"] - , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/file_system", "file_system_manager"] , ["src/buildtool/execution_engine/dag", "dag"] , ["src/buildtool/execution_api/common", "api_bundle"] diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp index 1d94d2ca..5a1eb857 100644 --- a/src/buildtool/execution_engine/executor/executor.hpp +++ b/src/buildtool/execution_engine/executor/executor.hpp @@ -31,9 +31,9 @@ #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" #include "src/buildtool/common/git_hashes_converter.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #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" @@ -437,7 +437,7 @@ class ExecutorImpl { std::string const& repo, gsl::not_null<const RepositoryConfig*> const& repo_config, Artifact::ObjectInfo const& info) noexcept -> bool { - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { auto opt = GitHashesConverter::Instance().GetGitEntry(info.digest.hash()); if (opt) { diff --git a/src/buildtool/file_system/TARGETS b/src/buildtool/file_system/TARGETS index 9d5be7a3..47c5e249 100644 --- a/src/buildtool/file_system/TARGETS +++ b/src/buildtool/file_system/TARGETS @@ -171,8 +171,8 @@ , ["src/buildtool/common", "common"] , ["src/buildtool/common", "artifact_description"] , ["src/buildtool/common", "artifact_digest_factory"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/crypto", "hash_function"] - , ["src/buildtool/compatibility", "compatibility"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] , ["@", "gsl", "", "gsl"] diff --git a/src/buildtool/file_system/file_root.hpp b/src/buildtool/file_system/file_root.hpp index 381f5c23..798d8341 100644 --- a/src/buildtool/file_system/file_root.hpp +++ b/src/buildtool/file_system/file_root.hpp @@ -29,7 +29,7 @@ #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" #include "src/buildtool/common/git_hashes_converter.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/file_system/git_tree.hpp" @@ -224,7 +224,7 @@ class FileRoot { /// Only succeeds if no entries have to be ignored. [[nodiscard]] auto AsKnownTree(std::string const& repository) const noexcept -> std::optional<ArtifactDescription> { - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { return std::nullopt; } if (std::holds_alternative<tree_t>(data_)) { @@ -584,7 +584,7 @@ class FileRoot { std::get<git_root_t>(root_).tree->LookupEntryByPath( file_path)) { if (entry->IsBlob()) { - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { auto compatible_hash = GitHashesConverter::Instance().RegisterGitEntry( entry->Hash(), *entry->Blob(), repository); diff --git a/src/buildtool/main/TARGETS b/src/buildtool/main/TARGETS index 03e9dd0f..d58ad86f 100644 --- a/src/buildtool/main/TARGETS +++ b/src/buildtool/main/TARGETS @@ -10,8 +10,8 @@ , ["src/buildtool/common", "common"] , ["src/buildtool/common", "config"] , ["src/buildtool/common/remote", "remote_common"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/storage", "storage"] - , ["src/buildtool/compatibility", "compatibility"] , ["src/buildtool/graph_traverser", "graph_traverser"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] @@ -154,10 +154,10 @@ , ["src/buildtool/storage", "storage"] ] , "private-deps": - [ ["src/buildtool/compatibility", "compatibility"] + [ ["src/buildtool/common", "protocol_traits"] + , ["src/buildtool/common", "common"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg_factory"] , ["src/buildtool/execution_api/common", "common"] - , ["src/buildtool/common", "common"] , ["src/buildtool/file_system", "file_system_manager"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] @@ -291,6 +291,7 @@ [ ["@", "json", "", "json"] , ["src/buildtool/build_engine/expression", "expression"] , ["src/buildtool/common", "location"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/file_system", "file_system_manager"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] diff --git a/src/buildtool/main/add_to_cas.cpp b/src/buildtool/main/add_to_cas.cpp index 2a7b2c0b..640c4621 100644 --- a/src/buildtool/main/add_to_cas.cpp +++ b/src/buildtool/main/add_to_cas.cpp @@ -22,7 +22,7 @@ #include <string> #include "src/buildtool/common/artifact_digest.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" @@ -71,7 +71,7 @@ auto AddArtifactsToCas(ToAddArguments const& clargs, digest = cas.StoreBlob(*content, /*is_executable=*/false); } break; case ObjectType::Tree: { - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { Logger::Log(LogLevel::Error, "Storing of trees only supported in native mode"); return false; diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp index ee118f4a..bb97fc44 100644 --- a/src/buildtool/main/main.cpp +++ b/src/buildtool/main/main.cpp @@ -34,10 +34,10 @@ #include "src/buildtool/build_engine/expression/expression.hpp" #include "src/buildtool/build_engine/target_map/target_map.hpp" #include "src/buildtool/common/artifact_description.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/remote_common.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/file_root.hpp" #include "src/buildtool/logging/log_config.hpp" @@ -765,7 +765,7 @@ auto main(int argc, char* argv[]) -> int { if (arguments.cmd == SubCommand::kGc) { // Set up storage for GC, as we have all the config args we need. auto const storage_config = CreateStorageConfig( - arguments.endpoint, Compatibility::IsCompatible()); + arguments.endpoint, ProtocolTraits::Instance().IsCompatible()); if (not storage_config) { return kExitFailure; } @@ -803,7 +803,8 @@ auto main(int argc, char* argv[]) -> int { // Set up storage for local execution. auto const storage_config = CreateStorageConfig( - arguments.endpoint, Compatibility::IsCompatible()); + arguments.endpoint, + ProtocolTraits::Instance().IsCompatible()); if (not storage_config) { return kExitFailure; } @@ -865,12 +866,12 @@ auto main(int argc, char* argv[]) -> int { } // Set up storage for serve operation. - auto const storage_config = - CreateStorageConfig(arguments.endpoint, - Compatibility::IsCompatible(), - remote_exec_config->remote_address, - remote_exec_config->platform_properties, - remote_exec_config->dispatch); + auto const storage_config = CreateStorageConfig( + arguments.endpoint, + ProtocolTraits::Instance().IsCompatible(), + remote_exec_config->remote_address, + remote_exec_config->platform_properties, + remote_exec_config->dispatch); if (not storage_config) { return kExitFailure; } @@ -942,7 +943,7 @@ auto main(int argc, char* argv[]) -> int { // correctly-sharded target cache. auto const storage_config = CreateStorageConfig(arguments.endpoint, - Compatibility::IsCompatible(), + ProtocolTraits::Instance().IsCompatible(), remote_exec_config->remote_address, remote_exec_config->platform_properties, remote_exec_config->dispatch); @@ -950,7 +951,7 @@ auto main(int argc, char* argv[]) -> int { // For bootstrapping the TargetCache sharding is not needed, so we can // default all execution arguments. auto const storage_config = CreateStorageConfig( - arguments.endpoint, Compatibility::IsCompatible()); + arguments.endpoint, ProtocolTraits::Instance().IsCompatible()); #endif // BOOTSTRAP_BUILD_TOOL if (not storage_config) { return kExitFailure; @@ -1041,7 +1042,7 @@ auto main(int argc, char* argv[]) -> int { if (arguments.cmd == SubCommand::kTraverse) { if (arguments.graph.git_cas) { - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { Logger::Log(LogLevel::Error, "Command line options {} and {} cannot be used " "together.", diff --git a/src/buildtool/main/serve.cpp b/src/buildtool/main/serve.cpp index 622df15e..66787a6e 100644 --- a/src/buildtool/main/serve.cpp +++ b/src/buildtool/main/serve.cpp @@ -31,6 +31,7 @@ #include "src/buildtool/build_engine/expression/configuration.hpp" #include "src/buildtool/build_engine/expression/expression.hpp" #include "src/buildtool/common/location.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" @@ -390,7 +391,7 @@ void ReadJustServeConfig(gsl::not_null<CommandLineArguments*> const& clargs) { } // compatibility is set immediately if flag is true if (compatible->Bool()) { - Compatibility::SetCompatible(); + ProtocolTraits::Instance().SetCompatible(); } } // read the address diff --git a/src/buildtool/serve_api/serve_service/TARGETS b/src/buildtool/serve_api/serve_service/TARGETS index 6135cd5a..b9b2ca57 100644 --- a/src/buildtool/serve_api/serve_service/TARGETS +++ b/src/buildtool/serve_api/serve_service/TARGETS @@ -34,7 +34,7 @@ [ ["@", "fmt", "", "fmt"] , ["src/buildtool/common", "common"] , ["src/buildtool/common", "artifact_digest_factory"] - , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/file_system", "git_repo"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/multithreading", "async_map_utils"] @@ -69,7 +69,7 @@ , ["@", "grpc", "", "grpc++"] , ["@", "json", "", "json"] , ["src/buildtool/common/remote", "port"] - , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/execution_api/execution_service", "execution_server"] , ["src/buildtool/execution_api/execution_service", "ac_server"] @@ -139,7 +139,7 @@ , "deps": [["@", "gsl", "", "gsl"], ["src/buildtool/execution_api/remote", "config"]] , "stage": ["src", "buildtool", "serve_api", "serve_service"] - , "private-deps": [["src/buildtool/compatibility", "compatibility"]] + , "private-deps": [["src/buildtool/common", "protocol_traits"]] } , "target_utils": { "type": ["@", "rules", "CC", "library"] diff --git a/src/buildtool/serve_api/serve_service/configuration.cpp b/src/buildtool/serve_api/serve_service/configuration.cpp index a5bd7655..8b340e8c 100644 --- a/src/buildtool/serve_api/serve_service/configuration.cpp +++ b/src/buildtool/serve_api/serve_service/configuration.cpp @@ -16,7 +16,7 @@ #include "src/buildtool/serve_api/serve_service/configuration.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" auto ConfigurationService::RemoteExecutionEndpoint( ::grpc::ServerContext* /*context*/, @@ -33,7 +33,7 @@ auto ConfigurationService::Compatibility( const ::justbuild::just_serve::CompatibilityRequest* /*request*/, ::justbuild::just_serve::CompatibilityResponse* response) -> ::grpc::Status { - response->set_compatible(Compatibility::IsCompatible()); + response->set_compatible(ProtocolTraits::Instance().IsCompatible()); return ::grpc::Status::OK; } diff --git a/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp b/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp index 7a398a1d..be307ba5 100644 --- a/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp +++ b/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp @@ -29,8 +29,8 @@ #include "fmt/core.h" #include "grpcpp/grpcpp.h" #include "nlohmann/json.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/port.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/execution_api/execution_service/ac_server.hpp" #include "src/buildtool/execution_api/execution_service/bytestream_server.hpp" #include "src/buildtool/execution_api/execution_service/capabilities_server.hpp" @@ -185,12 +185,14 @@ auto ServeServerImpl::Run( } auto const& info_str = nlohmann::to_string(info); - Logger::Log(LogLevel::Info, - fmt::format("{}serve{} service{} started: {}", - Compatibility::IsCompatible() ? "compatible " : "", - with_execute ? " and execute" : "", - with_execute ? "s" : "", - info_str)); + Logger::Log( + LogLevel::Info, + fmt::format( + "{}serve{} service{} started: {}", + ProtocolTraits::Instance().IsCompatible() ? "compatible " : "", + with_execute ? " and execute" : "", + with_execute ? "s" : "", + info_str)); if (not info_file_.empty()) { if (not TryWrite(info_file_, info_str)) { diff --git a/src/buildtool/serve_api/serve_service/source_tree.cpp b/src/buildtool/serve_api/serve_service/source_tree.cpp index acc29ba9..ed6fcae0 100644 --- a/src/buildtool/serve_api/serve_service/source_tree.cpp +++ b/src/buildtool/serve_api/serve_service/source_tree.cpp @@ -24,7 +24,7 @@ #include "src/buildtool/common/artifact.hpp" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/git/git_api.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" @@ -287,7 +287,7 @@ auto SourceTreeService::SyncGitEntryToCas( std::string const& object_hash, std::filesystem::path const& repo_path) const noexcept -> std::remove_cvref_t<decltype(TResponse::OK)> { - if (IsTreeObject(kType) and Compatibility::IsCompatible()) { + if (IsTreeObject(kType) and ProtocolTraits::Instance().IsCompatible()) { logger_->Emit(LogLevel::Error, "Cannot sync tree {} from repository {} with " "the remote in compatible mode", @@ -984,7 +984,7 @@ auto SourceTreeService::ServeDistdirTree( 0, /*is_tree=*/false); - if (not Compatibility::IsCompatible()) { + if (not ProtocolTraits::Instance().IsCompatible()) { blob_found = digest and cas.BlobPath(*digest, kv.executable()); } if (blob_found) { @@ -1054,8 +1054,8 @@ auto SourceTreeService::ServeDistdirTree( } if (not blob_found) { // check remote CAS - if (not Compatibility::IsCompatible() and digest and - apis_.remote->IsAvailable(*digest)) { + if (not ProtocolTraits::Instance().IsCompatible() and + digest and apis_.remote->IsAvailable(*digest)) { // retrieve content to local CAS if (not apis_.remote->RetrieveToCas( {Artifact::ObjectInfo{ @@ -1320,7 +1320,7 @@ auto SourceTreeService::ServeTree( storage_config_.hash_function.GetType(), tree_id, 0, /*is_tree=*/true); if (digest and apis_.local->IsAvailable(*digest)) { // upload tree to remote CAS; only possible in native mode - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { logger_->Emit(LogLevel::Error, "Cannot sync tree {} from local CAS with the remote " "in compatible mode", diff --git a/src/buildtool/storage/TARGETS b/src/buildtool/storage/TARGETS index ce54901e..f94cdf8d 100644 --- a/src/buildtool/storage/TARGETS +++ b/src/buildtool/storage/TARGETS @@ -8,7 +8,7 @@ , ["src/buildtool/common", "common"] , ["src/buildtool/common", "artifact_digest_factory"] , ["src/buildtool/common/remote", "remote_common"] - , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/file_system", "file_system_manager"] , ["src/buildtool/file_system", "object_type"] , ["src/buildtool/logging", "logging"] @@ -65,6 +65,8 @@ , "file_chunker" , ["src/buildtool/common", "common"] , ["src/buildtool/common", "artifact_digest_factory"] + , ["src/buildtool/common", "artifact_description"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/file_system", "file_storage"] , ["src/buildtool/file_system", "object_cas"] , ["src/buildtool/execution_api/common", "common"] @@ -82,8 +84,6 @@ , ["src/buildtool/logging", "logging"] , ["src/buildtool/common", "bazel_types"] , ["src/buildtool/file_system", "git_repo"] - , ["src/buildtool/common", "artifact_description"] - , ["src/buildtool/compatibility", "compatibility"] , ["src/buildtool/crypto", "hash_function"] ] , "stage": ["src", "buildtool", "storage"] diff --git a/src/buildtool/storage/config.hpp b/src/buildtool/storage/config.hpp index 81f14feb..da0e72d4 100644 --- a/src/buildtool/storage/config.hpp +++ b/src/buildtool/storage/config.hpp @@ -26,8 +26,8 @@ #include "gsl/gsl" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" +#include "src/buildtool/common/protocol_traits.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" @@ -132,7 +132,7 @@ struct StorageConfig final { [[nodiscard]] auto CreateGenerationConfig( std::size_t generation) const noexcept -> GenerationConfig { - bool const compatible = Compatibility::IsCompatible(); + bool const compatible = ProtocolTraits::Instance().IsCompatible(); auto const cache_root = GenerationCacheRoot(generation); auto const cache_dir = UpdatePathForCompatibility(cache_root, compatible); diff --git a/src/buildtool/storage/garbage_collector.cpp b/src/buildtool/storage/garbage_collector.cpp index a108ae73..97a0f96c 100644 --- a/src/buildtool/storage/garbage_collector.cpp +++ b/src/buildtool/storage/garbage_collector.cpp @@ -22,7 +22,7 @@ #include "gsl/gsl" #include "src/buildtool/common/artifact.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/message_limits.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" @@ -215,13 +215,14 @@ auto GarbageCollector::TriggerGarbageCollection( auto GarbageCollector::Compactify(StorageConfig const& storage_config, size_t threshold) noexcept -> bool { // Return to the initial compatibility mode once done: - auto const guard = gsl::finally([mode = Compatibility::IsCompatible()] { - Compatibility::SetCompatible(mode); - }); + auto const guard = + gsl::finally([mode = ProtocolTraits::Instance().IsCompatible()] { + ProtocolTraits::Instance().SetCompatible(mode); + }); auto compactify = [threshold](StorageConfig const& config) -> bool { - Compatibility::SetCompatible(config.hash_function.GetType() == - HashFunction::Type::PlainSHA256); + ProtocolTraits::Instance().SetCompatible( + config.hash_function.GetType() == HashFunction::Type::PlainSHA256); auto const storage = ::Generation::Create(&config); return Compactifier::RemoveInvalid(storage.CAS()) and diff --git a/src/buildtool/storage/large_object_cas.tpp b/src/buildtool/storage/large_object_cas.tpp index 67a4ad75..b790140a 100644 --- a/src/buildtool/storage/large_object_cas.tpp +++ b/src/buildtool/storage/large_object_cas.tpp @@ -23,7 +23,7 @@ #include "fmt/core.h" #include "nlohmann/json.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/storage/file_chunker.hpp" @@ -47,10 +47,10 @@ auto LargeObjectCAS<kDoGlobalUplink, kType>::GetEntryPath( if constexpr (kDoGlobalUplink) { // To promote parts of the tree properly, regular uplinking logic for // trees is used: - bool uplinked = - IsTreeObject(kType) and not Compatibility::IsCompatible() - ? uplinker_.UplinkTree(digest) - : uplinker_.UplinkLargeBlob(digest); + bool uplinked = IsTreeObject(kType) and + not ProtocolTraits::Instance().IsCompatible() + ? uplinker_.UplinkTree(digest) + : uplinker_.UplinkLargeBlob(digest); if (uplinked and FileSystemManager::IsFile(file_path)) { return file_path; } diff --git a/src/buildtool/storage/local_cas.hpp b/src/buildtool/storage/local_cas.hpp index e7f5ce22..e6dc9ee4 100644 --- a/src/buildtool/storage/local_cas.hpp +++ b/src/buildtool/storage/local_cas.hpp @@ -23,6 +23,7 @@ #include "gsl/gsl" #include "src/buildtool/common/artifact_digest.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/git_repo.hpp" #include "src/buildtool/file_system/object_cas.hpp" @@ -286,7 +287,7 @@ class LocalCAS { if constexpr (IsTreeObject(kType)) { // in non-compatible mode, do explicit deep tree uplink // in compatible mode, treat all trees as blobs - if (not Compatibility::IsCompatible()) { + if (not ProtocolTraits::Instance().IsCompatible()) { return uplinker->UplinkTree(digest); } } diff --git a/src/buildtool/storage/local_cas.tpp b/src/buildtool/storage/local_cas.tpp index 7ab29b08..39433b81 100644 --- a/src/buildtool/storage/local_cas.tpp +++ b/src/buildtool/storage/local_cas.tpp @@ -83,7 +83,7 @@ auto LocalCAS<kDoGlobalUplink>::LocalUplinkTree( LocalGenerationCAS const& latest, ArtifactDigest const& digest, bool splice_result) const noexcept -> bool { - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { std::unordered_set<ArtifactDigest> seen{}; return LocalUplinkBazelDirectory(latest, digest, &seen, splice_result); } @@ -303,7 +303,7 @@ auto LocalCAS<kDoGlobalUplink>::CheckTreeInvariant( ArtifactDigest const& tree_digest, std::string const& tree_data) const noexcept -> std::optional<LargeObjectError> { - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { return std::nullopt; } @@ -399,7 +399,7 @@ auto LocalCAS<kDoGlobalUplink>::Splice(ArtifactDigest const& digest, // Check tree invariants: if constexpr (kIsTree) { - if (not Compatibility::IsCompatible()) { + if (not ProtocolTraits::Instance().IsCompatible()) { // Read tree entries: auto const tree_data = FileSystemManager::ReadFile(file_path); if (not tree_data) { diff --git a/src/other_tools/just_mr/TARGETS b/src/other_tools/just_mr/TARGETS index ca433364..2587909a 100644 --- a/src/other_tools/just_mr/TARGETS +++ b/src/other_tools/just_mr/TARGETS @@ -9,7 +9,7 @@ , ["@", "json", "", "json"] , ["src/buildtool/build_engine/expression", "expression"] , ["src/buildtool/common", "retry_cli"] - , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/file_system", "git_context"] , ["src/buildtool/logging", "logging"] , ["src/buildtool/logging", "log_level"] diff --git a/src/other_tools/just_mr/main.cpp b/src/other_tools/just_mr/main.cpp index 24bf8ffd..43b615ce 100644 --- a/src/other_tools/just_mr/main.cpp +++ b/src/other_tools/just_mr/main.cpp @@ -26,8 +26,8 @@ #include "gsl/gsl" #include "nlohmann/json.hpp" #include "src/buildtool/build_engine/expression/configuration.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/retry_cli.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/git_context.hpp" #include "src/buildtool/logging/log_config.hpp" @@ -319,7 +319,7 @@ auto main(int argc, char* argv[]) -> int { // Setup LocalStorageConfig to store the local_build_root properly // and make the cas and git cache roots available auto storage_config = CreateStorageConfig( - arguments.common, Compatibility::IsCompatible()); + arguments.common, ProtocolTraits::Instance().IsCompatible()); if (not storage_config) { Logger::Log(LogLevel::Error, "Failed to configure local build root."); diff --git a/src/other_tools/ops_maps/TARGETS b/src/other_tools/ops_maps/TARGETS index 9fa5dce7..5cd2d46f 100644 --- a/src/other_tools/ops_maps/TARGETS +++ b/src/other_tools/ops_maps/TARGETS @@ -124,7 +124,7 @@ [ ["src/other_tools/ops_maps", "critical_git_op_map"] , ["src/buildtool/common", "config"] , ["src/buildtool/common", "common"] - , ["src/buildtool/compatibility", "compatibility"] + , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/file_system", "file_system_manager"] , ["src/buildtool/multithreading", "task_system"] , ["src/buildtool/system", "system_command"] diff --git a/src/other_tools/ops_maps/git_tree_fetch_map.cpp b/src/other_tools/ops_maps/git_tree_fetch_map.cpp index 7e6da1dd..1bfc25ad 100644 --- a/src/other_tools/ops_maps/git_tree_fetch_map.cpp +++ b/src/other_tools/ops_maps/git_tree_fetch_map.cpp @@ -20,8 +20,8 @@ #include "fmt/core.h" #include "src/buildtool/common/artifact_digest.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/repository_config.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/execution_api/common/execution_common.hpp" #include "src/buildtool/execution_api/git/git_api.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" diff --git a/test/buildtool/build_engine/base_maps/TARGETS b/test/buildtool/build_engine/base_maps/TARGETS index 855d6217..2c5f4029 100644 --- a/test/buildtool/build_engine/base_maps/TARGETS +++ b/test/buildtool/build_engine/base_maps/TARGETS @@ -63,6 +63,7 @@ , ["", "catch-main"] , ["@", "json", "", "json"] , ["@", "src", "src/buildtool/common", "config"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/build_engine/base_maps", "directory_map"] , ["@", "src", "src/buildtool/build_engine/base_maps", "source_map"] , ["@", "src", "src/buildtool/build_engine/base_maps", "entity_name_data"] diff --git a/test/buildtool/build_engine/base_maps/source_map.test.cpp b/test/buildtool/build_engine/base_maps/source_map.test.cpp index 44c6863a..b6c7f1c1 100644 --- a/test/buildtool/build_engine/base_maps/source_map.test.cpp +++ b/test/buildtool/build_engine/base_maps/source_map.test.cpp @@ -25,6 +25,7 @@ #include "src/buildtool/build_engine/base_maps/directory_map.hpp" #include "src/buildtool/build_engine/base_maps/entity_name.hpp" #include "src/buildtool/build_engine/base_maps/entity_name_data.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/file_system/file_root.hpp" #include "src/buildtool/multithreading/async_map_consumer.hpp" @@ -102,7 +103,8 @@ TEST_CASE("from file") { CHECK(ReadSourceTarget(name, consumer, /*use_git=*/true)); CHECK(artifacts["file"]["type"] == "KNOWN"); CHECK(artifacts["file"]["data"]["id"] == - (Compatibility::IsCompatible() ? kEmptySha256 : kEmptySha1)); + (ProtocolTraits::Instance().IsCompatible() ? kEmptySha256 + : kEmptySha1)); CHECK(artifacts["file"]["data"]["size"] == 0); } } @@ -168,7 +170,8 @@ TEST_CASE("subdir file") { CHECK(ReadSourceTarget(name, consumer, /*use_git=*/true)); CHECK(artifacts["bar/file"]["type"] == "KNOWN"); CHECK(artifacts["bar/file"]["data"]["id"] == - (Compatibility::IsCompatible() ? kEmptySha256 : kEmptySha1)); + (ProtocolTraits::Instance().IsCompatible() ? kEmptySha256 + : kEmptySha1)); CHECK(artifacts["bar/file"]["data"]["size"] == 0); } } @@ -189,9 +192,9 @@ TEST_CASE("subdir symlink") { SECTION("via git tree") { CHECK(ReadSourceTarget(name, consumer, /*use_git=*/true)); CHECK(artifacts["link"]["type"] == "KNOWN"); - CHECK(artifacts["link"]["data"]["id"] == (Compatibility::IsCompatible() - ? kSrcLinkIdSha256 - : kSrcLinkIdSha1)); + CHECK(artifacts["link"]["data"]["id"] == + (ProtocolTraits::Instance().IsCompatible() ? kSrcLinkIdSha256 + : kSrcLinkIdSha1)); CHECK(artifacts["link"]["data"]["size"] == 5); // content: dummy } } diff --git a/test/buildtool/common/TARGETS b/test/buildtool/common/TARGETS index ef1fff25..1355af3f 100644 --- a/test/buildtool/common/TARGETS +++ b/test/buildtool/common/TARGETS @@ -9,9 +9,9 @@ , ["@", "src", "src/buildtool/common", "artifact_description"] , ["@", "src", "src/buildtool/common", "common"] , ["@", "src", "src/buildtool/common", "artifact_digest_factory"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/crypto", "hash_function"] , ["@", "src", "src/buildtool/file_system", "object_type"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] ] , "stage": ["test", "buildtool", "common"] } @@ -25,8 +25,8 @@ , ["@", "json", "", "json"] , ["@", "src", "src/buildtool/common", "action_description"] , ["@", "src", "src/buildtool/common", "common"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] ] , "stage": ["test", "buildtool", "common"] } diff --git a/test/buildtool/common/action_description.test.cpp b/test/buildtool/common/action_description.test.cpp index 7d5a72d7..504f6aa3 100644 --- a/test/buildtool/common/action_description.test.cpp +++ b/test/buildtool/common/action_description.test.cpp @@ -20,7 +20,7 @@ #include "nlohmann/json.hpp" #include "src/buildtool/common/action.hpp" #include "src/buildtool/common/artifact_description.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" [[nodiscard]] static inline auto GetHashType(bool compatible) noexcept @@ -45,7 +45,8 @@ TEST_CASE("From JSON", "[action_description]") { desc.Inputs()} .ToJson(); - auto const hash_type = GetHashType(Compatibility::IsCompatible()); + auto const hash_type = + GetHashType(ProtocolTraits::Instance().IsCompatible()); SECTION("Parse full action") { auto description = ActionDescription::FromJson(hash_type, "id", json); REQUIRE(description); diff --git a/test/buildtool/common/artifact_description.test.cpp b/test/buildtool/common/artifact_description.test.cpp index a05baa66..99a24964 100644 --- a/test/buildtool/common/artifact_description.test.cpp +++ b/test/buildtool/common/artifact_description.test.cpp @@ -22,12 +22,12 @@ #include "src/buildtool/common/artifact.hpp" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/object_type.hpp" static auto NamedDigest(std::string const& str) -> ArtifactDigest { - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; return ArtifactDigestFactory::HashDataAs<ObjectType::File>(hash_function, @@ -50,7 +50,8 @@ TEST_CASE("Local artifact", "[artifact_description]") { auto local_desc = ArtifactDescription::CreateLocal( std::filesystem::path{"local_path"}, "repo"); auto from_json = ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), local_desc.ToJson()); + GetHashType(ProtocolTraits::Instance().IsCompatible()), + local_desc.ToJson()); CHECK(local_desc == *from_json); } @@ -59,21 +60,24 @@ TEST_CASE("Known artifact", "[artifact_description]") { auto known_desc = ArtifactDescription::CreateKnown( NamedDigest("f_fake_hash"), ObjectType::File); auto from_json = ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), known_desc.ToJson()); + GetHashType(ProtocolTraits::Instance().IsCompatible()), + known_desc.ToJson()); CHECK(known_desc == *from_json); } SECTION("Executable object") { auto known_desc = ArtifactDescription::CreateKnown( NamedDigest("x_fake_hash"), ObjectType::Executable); auto from_json = ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), known_desc.ToJson()); + GetHashType(ProtocolTraits::Instance().IsCompatible()), + known_desc.ToJson()); CHECK(known_desc == *from_json); } SECTION("Symlink object") { auto known_desc = ArtifactDescription::CreateKnown( NamedDigest("l_fake_hash"), ObjectType::Symlink); auto from_json = ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), known_desc.ToJson()); + GetHashType(ProtocolTraits::Instance().IsCompatible()), + known_desc.ToJson()); CHECK(known_desc == *from_json); } } @@ -82,7 +86,8 @@ TEST_CASE("Action artifact", "[artifact_description]") { auto action_desc = ArtifactDescription::CreateAction( "action_id", std::filesystem::path{"out_path"}); auto from_json = ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), action_desc.ToJson()); + GetHashType(ProtocolTraits::Instance().IsCompatible()), + action_desc.ToJson()); CHECK(action_desc == *from_json); } @@ -93,7 +98,8 @@ TEST_CASE("From JSON", "[artifact_description]") { .ToJson(); auto action = ArtifactDescription::CreateAction("id", "output").ToJson(); - auto const hash_type = GetHashType(Compatibility::IsCompatible()); + auto const hash_type = + GetHashType(ProtocolTraits::Instance().IsCompatible()); SECTION("Parse artifacts") { CHECK(ArtifactDescription::FromJson(hash_type, local)); CHECK(ArtifactDescription::FromJson(hash_type, known)); @@ -172,10 +178,10 @@ TEST_CASE("Description missing mandatory key/value pair", "[artifact_description]") { nlohmann::json const missing_type = {{"data", {{"path", "some/path"}}}}; CHECK(not ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), missing_type)); + GetHashType(ProtocolTraits::Instance().IsCompatible()), missing_type)); nlohmann::json const missing_data = {{"type", "LOCAL"}}; CHECK(not ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), missing_data)); + GetHashType(ProtocolTraits::Instance().IsCompatible()), missing_data)); } TEST_CASE("Local artifact description contains incorrect value for \"data\"", @@ -183,7 +189,8 @@ TEST_CASE("Local artifact description contains incorrect value for \"data\"", nlohmann::json const local_art_missing_path = { {"type", "LOCAL"}, {"data", nlohmann::json::object()}}; CHECK(not ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), local_art_missing_path)); + GetHashType(ProtocolTraits::Instance().IsCompatible()), + local_art_missing_path)); } TEST_CASE("Known artifact description contains incorrect value for \"data\"", @@ -195,14 +202,15 @@ TEST_CASE("Known artifact description contains incorrect value for \"data\"", {"type", "KNOWN"}, {"data", {{"size", 15}, {"file_type", file_type}}}}; CHECK(not ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), known_art_missing_id)); + GetHashType(ProtocolTraits::Instance().IsCompatible()), + known_art_missing_id)); } SECTION("missing \"size\"") { nlohmann::json const known_art_missing_size = { {"type", "KNOWN"}, {"data", {{"id", "known_input"}, {"file_type", file_type}}}}; CHECK(not ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), + GetHashType(ProtocolTraits::Instance().IsCompatible()), known_art_missing_size)); } SECTION("missing \"file_type\"") { @@ -210,7 +218,7 @@ TEST_CASE("Known artifact description contains incorrect value for \"data\"", {"type", "KNOWN"}, {"data", {{"id", "known_input"}, {"size", 15}}}}; CHECK(not ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), + GetHashType(ProtocolTraits::Instance().IsCompatible()), known_art_missing_file_type)); } } @@ -220,10 +228,12 @@ TEST_CASE("Action artifact description contains incorrect value for \"data\"", nlohmann::json const action_art_missing_id = { {"type", "ACTION"}, {"data", {{"path", "output/path"}}}}; CHECK(not ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), action_art_missing_id)); + GetHashType(ProtocolTraits::Instance().IsCompatible()), + action_art_missing_id)); nlohmann::json const action_art_missing_path = { {"type", "ACTION"}, {"data", {{"id", "action_id"}}}}; CHECK(not ArtifactDescription::FromJson( - GetHashType(Compatibility::IsCompatible()), action_art_missing_path)); + GetHashType(ProtocolTraits::Instance().IsCompatible()), + action_art_missing_path)); } diff --git a/test/buildtool/execution_api/bazel/TARGETS b/test/buildtool/execution_api/bazel/TARGETS index 192a6182..64e52ad6 100644 --- a/test/buildtool/execution_api/bazel/TARGETS +++ b/test/buildtool/execution_api/bazel/TARGETS @@ -9,6 +9,7 @@ , ["utils", "test_auth_config"] , ["utils", "test_remote_config"] , ["@", "src", "src/buildtool/common", "bazel_digest_factory"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/common/remote", "retry_config"] , ["@", "src", "src/buildtool/execution_api/bazel_msg", "bazel_msg"] , ["@", "src", "src/buildtool/execution_api/remote", "bazel_network"] @@ -29,12 +30,12 @@ , ["utils", "test_auth_config"] , ["utils", "test_remote_config"] , ["@", "src", "src/buildtool/common", "bazel_digest_factory"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/common/remote", "retry_config"] , ["@", "src", "src/buildtool/execution_api/remote", "bazel_network"] , ["@", "src", "src/buildtool/execution_api/remote", "config"] , ["@", "src", "src/buildtool/file_system", "object_type"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] ] , "stage": ["test", "buildtool", "execution_api", "bazel"] } @@ -49,12 +50,12 @@ , ["utils", "test_auth_config"] , ["utils", "test_remote_config"] , ["@", "src", "src/buildtool/common", "bazel_digest_factory"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/execution_api/bazel_msg", "bazel_msg"] , ["@", "src", "src/buildtool/execution_api/remote", "bazel_network"] , ["@", "src", "src/buildtool/execution_api/remote", "config"] , ["@", "src", "src/buildtool/file_system", "object_type"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] ] , "stage": ["test", "buildtool", "execution_api", "bazel"] } @@ -69,8 +70,8 @@ , ["utils", "test_auth_config"] , ["utils", "test_remote_config"] , ["@", "src", "src/buildtool/common", "bazel_digest_factory"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/common/remote", "retry_config"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] , ["@", "src", "src/buildtool/execution_api/bazel_msg", "bazel_msg"] , ["@", "src", "src/buildtool/execution_api/remote", "bazel_network"] , ["@", "src", "src/buildtool/execution_api/remote", "config"] @@ -96,8 +97,8 @@ , ["@", "src", "src/buildtool/file_system", "object_type"] , ["@", "src", "src/buildtool/common", "common"] , ["@", "src", "src/buildtool/common", "artifact_digest_factory"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] , ["@", "src", "src/buildtool/execution_api/common", "common"] , [ "@" , "src" @@ -121,7 +122,7 @@ , ["@", "src", "src/buildtool/execution_api/remote", "bazel"] , ["buildtool/execution_api/common", "api_test"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] ] , "stage": ["test", "buildtool", "execution_api", "bazel"] } diff --git a/test/buildtool/execution_api/bazel/bazel_api.test.cpp b/test/buildtool/execution_api/bazel/bazel_api.test.cpp index bced4a87..5dc4198d 100644 --- a/test/buildtool/execution_api/bazel/bazel_api.test.cpp +++ b/test/buildtool/execution_api/bazel/bazel_api.test.cpp @@ -18,8 +18,8 @@ #include <string> #include "catch2/catch_test_macros.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/retry_config.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/remote/config.hpp" #include "test/buildtool/execution_api/common/api_test.hpp" @@ -64,7 +64,7 @@ TEST_CASE("BazelAPI: No input, no output", "[execution_api]") { auto auth = TestAuthConfig::ReadFromEnvironment(); REQUIRE(auth); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -80,7 +80,7 @@ TEST_CASE("BazelAPI: No input, create output", "[execution_api]") { auto auth = TestAuthConfig::ReadFromEnvironment(); REQUIRE(auth); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -96,7 +96,7 @@ TEST_CASE("BazelAPI: One input copied to output", "[execution_api]") { auto auth = TestAuthConfig::ReadFromEnvironment(); REQUIRE(auth); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -112,7 +112,7 @@ TEST_CASE("BazelAPI: Non-zero exit code, create output", "[execution_api]") { auto auth = TestAuthConfig::ReadFromEnvironment(); REQUIRE(auth); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -129,7 +129,7 @@ TEST_CASE("BazelAPI: Retrieve two identical trees to path", "[execution_api]") { auto auth = TestAuthConfig::ReadFromEnvironment(); REQUIRE(auth); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -147,7 +147,7 @@ TEST_CASE("BazelAPI: Retrieve file and symlink with same content to path", auto auth = TestAuthConfig::ReadFromEnvironment(); REQUIRE(auth); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -164,7 +164,7 @@ TEST_CASE("BazelAPI: Retrieve mixed blobs and trees", "[execution_api]") { auto auth = TestAuthConfig::ReadFromEnvironment(); REQUIRE(auth); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -181,7 +181,7 @@ TEST_CASE("BazelAPI: Create directory prior to execution", "[execution_api]") { auto auth = TestAuthConfig::ReadFromEnvironment(); REQUIRE(auth); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; diff --git a/test/buildtool/execution_api/bazel/bazel_cas_client.test.cpp b/test/buildtool/execution_api/bazel/bazel_cas_client.test.cpp index e4772f7d..4be61071 100644 --- a/test/buildtool/execution_api/bazel/bazel_cas_client.test.cpp +++ b/test/buildtool/execution_api/bazel/bazel_cas_client.test.cpp @@ -21,6 +21,7 @@ #include "catch2/catch_test_macros.hpp" #include "gsl/gsl" #include "src/buildtool/common/bazel_digest_factory.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" @@ -49,9 +50,10 @@ TEST_CASE("Bazel internals: CAS Client", "[execution_api]") { SECTION("Valid digest and blob") { // digest of "test" - HashFunction const hash_function{Compatibility::IsCompatible() - ? HashFunction::Type::PlainSHA256 - : HashFunction::Type::GitSHA1}; + HashFunction const hash_function{ + ProtocolTraits::Instance().IsCompatible() + ? HashFunction::Type::PlainSHA256 + : HashFunction::Type::GitSHA1}; auto digest = BazelDigestFactory::HashDataAs<ObjectType::File>( hash_function, content); diff --git a/test/buildtool/execution_api/bazel/bazel_execution_client.test.cpp b/test/buildtool/execution_api/bazel/bazel_execution_client.test.cpp index c354316c..a0f77066 100644 --- a/test/buildtool/execution_api/bazel/bazel_execution_client.test.cpp +++ b/test/buildtool/execution_api/bazel/bazel_execution_client.test.cpp @@ -18,8 +18,8 @@ #include "catch2/catch_test_macros.hpp" #include "src/buildtool/common/bazel_digest_factory.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/retry_config.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/remote/config.hpp" #include "src/buildtool/file_system/object_type.hpp" @@ -31,7 +31,7 @@ TEST_CASE("Bazel internals: Execution Client", "[execution_api]") { std::string instance_name{"remote-execution"}; std::string content("test"); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -115,7 +115,7 @@ TEST_CASE("Bazel internals: Execution Client using env variables", std::string instance_name{"remote-execution"}; std::string content("contents of env variable"); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; diff --git a/test/buildtool/execution_api/bazel/bazel_msg_factory.test.cpp b/test/buildtool/execution_api/bazel/bazel_msg_factory.test.cpp index 40dec8da..8ec074f9 100644 --- a/test/buildtool/execution_api/bazel/bazel_msg_factory.test.cpp +++ b/test/buildtool/execution_api/bazel/bazel_msg_factory.test.cpp @@ -23,7 +23,7 @@ #include "src/buildtool/common/artifact_description.hpp" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/artifact_blob_container.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" @@ -62,7 +62,7 @@ TEST_CASE("Bazel internals: MessageFactory", "[execution_api]") { std::filesystem::path link = subdir1 / "link"; REQUIRE(FileSystemManager::CreateSymlink("file1", link)); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; diff --git a/test/buildtool/execution_api/bazel/bazel_network.test.cpp b/test/buildtool/execution_api/bazel/bazel_network.test.cpp index 01c5aea9..c69e7619 100644 --- a/test/buildtool/execution_api/bazel/bazel_network.test.cpp +++ b/test/buildtool/execution_api/bazel/bazel_network.test.cpp @@ -22,8 +22,8 @@ #include "catch2/catch_test_macros.hpp" #include "src/buildtool/auth/authentication.hpp" #include "src/buildtool/common/bazel_digest_factory.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/retry_config.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp" @@ -46,7 +46,7 @@ TEST_CASE("Bazel network: write/read blobs", "[execution_api]") { RetryConfig retry_config{}; // default retry config - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -97,7 +97,7 @@ TEST_CASE("Bazel network: write/read blobs", "[execution_api]") { } TEST_CASE("Bazel network: read blobs with unknown size", "[execution_api]") { - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { // only supported in native mode return; } @@ -113,7 +113,7 @@ TEST_CASE("Bazel network: read blobs with unknown size", "[execution_api]") { RetryConfig retry_config{}; // default retry config - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; diff --git a/test/buildtool/execution_api/bazel/bytestream_client.test.cpp b/test/buildtool/execution_api/bazel/bytestream_client.test.cpp index 731073e5..1956a6a3 100644 --- a/test/buildtool/execution_api/bazel/bytestream_client.test.cpp +++ b/test/buildtool/execution_api/bazel/bytestream_client.test.cpp @@ -21,7 +21,7 @@ #include "catch2/catch_test_macros.hpp" #include "src/buildtool/auth/authentication.hpp" #include "src/buildtool/common/bazel_digest_factory.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.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/execution_common.hpp" @@ -45,7 +45,7 @@ TEST_CASE("ByteStream Client: Transfer single blob", "[execution_api]") { &*auth_config}; auto uuid = CreateUUIDVersion4(*CreateProcessUniqueId()); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -152,7 +152,7 @@ TEST_CASE("ByteStream Client: Transfer multiple blobs", "[execution_api]") { &*auth_config}; auto uuid = CreateUUIDVersion4(*CreateProcessUniqueId()); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; diff --git a/test/buildtool/execution_api/common/TARGETS b/test/buildtool/execution_api/common/TARGETS index 08ee9c39..f58bb4f0 100644 --- a/test/buildtool/execution_api/common/TARGETS +++ b/test/buildtool/execution_api/common/TARGETS @@ -5,14 +5,14 @@ , "deps": [ ["@", "catch2", "", "catch2"] , ["@", "src", "src/buildtool/common", "artifact_description"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] + , ["@", "src", "src/buildtool/common", "artifact_digest_factory"] , ["@", "src", "src/buildtool/execution_api/common", "common"] , ["@", "src", "src/buildtool/execution_api/local", "config"] , ["@", "src", "src/buildtool/file_system", "file_system_manager"] , ["@", "src", "src/buildtool/logging", "log_level"] , ["@", "src", "src/buildtool/logging", "logging"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] - , ["@", "src", "src/buildtool/common", "artifact_digest_factory"] ] , "stage": ["test", "buildtool", "execution_api", "common"] } diff --git a/test/buildtool/execution_api/common/api_test.hpp b/test/buildtool/execution_api/common/api_test.hpp index 382760f6..3c4052b3 100644 --- a/test/buildtool/execution_api/common/api_test.hpp +++ b/test/buildtool/execution_api/common/api_test.hpp @@ -25,7 +25,7 @@ #include "catch2/catch_test_macros.hpp" #include "src/buildtool/common/artifact_description.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/execution_action.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" @@ -140,7 +140,7 @@ using ExecProps = std::map<std::string, std::string>; bool is_hermetic = false) { std::string test_content("test"); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -224,7 +224,7 @@ using ExecProps = std::map<std::string, std::string>; bool is_hermetic = false) { std::string test_content("test"); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -315,7 +315,7 @@ using ExecProps = std::map<std::string, std::string>; ExecProps const& props) { std::string test_content("test"); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; diff --git a/test/buildtool/execution_api/execution_service/TARGETS b/test/buildtool/execution_api/execution_service/TARGETS index a2c1e9dd..776f0f2b 100644 --- a/test/buildtool/execution_api/execution_service/TARGETS +++ b/test/buildtool/execution_api/execution_service/TARGETS @@ -17,6 +17,7 @@ , ["@", "src", "src/buildtool/file_system", "object_type"] , ["@", "src", "src/buildtool/common", "common"] , ["@", "src", "src/buildtool/common", "bazel_digest_factory"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/storage", "config"] , ["@", "src", "src/buildtool/storage", "storage"] , ["@", "gsl", "", "gsl"] diff --git a/test/buildtool/execution_api/execution_service/cas_server.test.cpp b/test/buildtool/execution_api/execution_service/cas_server.test.cpp index ca88b17b..8d68d9cb 100644 --- a/test/buildtool/execution_api/execution_service/cas_server.test.cpp +++ b/test/buildtool/execution_api/execution_service/cas_server.test.cpp @@ -20,6 +20,7 @@ #include "gsl/gsl" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/bazel_digest_factory.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/execution_api/local/config.hpp" #include "src/buildtool/execution_api/local/context.hpp" #include "src/buildtool/file_system/git_repo.hpp" @@ -47,7 +48,7 @@ namespace { TEST_CASE("CAS Service: upload incomplete tree", "[execution_service]") { // For compatible mode tree invariants aren't checked. - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { return; } diff --git a/test/buildtool/execution_engine/executor/TARGETS b/test/buildtool/execution_engine/executor/TARGETS index a3176e91..74247e49 100644 --- a/test/buildtool/execution_engine/executor/TARGETS +++ b/test/buildtool/execution_engine/executor/TARGETS @@ -7,6 +7,7 @@ , ["@", "src", "src/buildtool/common", "artifact_description"] , ["@", "src", "src/buildtool/common", "common"] , ["@", "src", "src/buildtool/common", "artifact_digest_factory"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/execution_api/common", "common"] , ["@", "src", "src/buildtool/execution_api/remote", "config"] , ["@", "src", "src/buildtool/execution_api/remote", "context"] @@ -16,7 +17,6 @@ , ["@", "src", "src/buildtool/file_system", "file_system_manager"] , ["@", "src", "src/buildtool/progress_reporting", "progress"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] , ["@", "catch2", "", "catch2"] , ["@", "gsl", "", "gsl"] , ["utils", "test_api_bundle"] @@ -34,6 +34,7 @@ , ["@", "src", "src/buildtool/common", "common"] , ["@", "src", "src/buildtool/common", "artifact_digest_factory"] , ["@", "src", "src/buildtool/common", "config"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/common/remote", "retry_config"] , ["@", "src", "src/buildtool/execution_api/common", "common"] , ["@", "src", "src/buildtool/execution_api/remote", "config"] @@ -43,7 +44,6 @@ , ["@", "src", "src/buildtool/execution_engine/executor", "executor"] , ["@", "src", "src/buildtool/progress_reporting", "progress"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] , ["", "catch-main"] , ["@", "catch2", "", "catch2"] , ["@", "gsl", "", "gsl"] @@ -84,13 +84,13 @@ [ "executor_api_tests" , ["@", "src", "src/buildtool/common", "common"] , ["@", "src", "src/buildtool/common", "config"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/common/remote", "retry_config"] , ["@", "src", "src/buildtool/execution_api/remote", "bazel"] , ["@", "src", "src/buildtool/execution_api/remote", "config"] , ["@", "src", "src/buildtool/execution_engine/executor", "executor"] , ["@", "src", "src/buildtool/progress_reporting", "progress"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] , ["utils", "catch-main-remote-execution"] , ["utils", "test_auth_config"] , ["utils", "test_remote_config"] diff --git a/test/buildtool/execution_engine/executor/executor.test.cpp b/test/buildtool/execution_engine/executor/executor.test.cpp index ee950ec0..d0533f9c 100644 --- a/test/buildtool/execution_engine/executor/executor.test.cpp +++ b/test/buildtool/execution_engine/executor/executor.test.cpp @@ -29,9 +29,9 @@ #include "src/buildtool/common/artifact_description.hpp" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" #include "src/buildtool/execution_api/remote/config.hpp" @@ -64,7 +64,7 @@ struct TestApiConfig { }; static auto NamedDigest(std::string const& str) -> ArtifactDigest { - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; return ArtifactDigestFactory::HashDataAs<ObjectType::File>(hash_function, @@ -305,7 +305,7 @@ TEST_CASE("Executor: Process artifact", "[executor]") { DependencyGraph g; auto [config, repo_config] = CreateTest(&g, workspace_path); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -383,7 +383,7 @@ TEST_CASE("Executor: Process action", "[executor]") { DependencyGraph g; auto [config, repo_config] = CreateTest(&g, workspace_path); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; diff --git a/test/buildtool/execution_engine/executor/executor_api.test.hpp b/test/buildtool/execution_engine/executor/executor_api.test.hpp index c898d9e8..570c6e39 100644 --- a/test/buildtool/execution_engine/executor/executor_api.test.hpp +++ b/test/buildtool/execution_engine/executor/executor_api.test.hpp @@ -27,10 +27,10 @@ #include "src/buildtool/common/artifact.hpp" #include "src/buildtool/common/artifact_description.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" #include "src/buildtool/execution_api/remote/config.hpp" @@ -56,7 +56,7 @@ static inline void RunBlobUpload(RepositoryConfig* repo_config, ApiFactory const& factory) { SetupConfig(repo_config); auto api = factory(); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -144,7 +144,7 @@ static inline void RunHelloWorldCompilation( .retry_config = &retry_config, .exec_config = &*remote_config}; - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -279,7 +279,7 @@ static inline void RunGreeterCompilation( .retry_config = &retry_config, .exec_config = &*remote_config}; - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -420,7 +420,7 @@ static inline void TestUploadAndDownloadTrees( env.emplace("PATH", "/bin:/usr/bin"); } - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -576,7 +576,7 @@ static inline void TestRetrieveOutputDirectories( int /*expected_cached*/ = 0) { SetupConfig(repo_config); - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; diff --git a/test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp b/test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp index 0e068ea9..fd2167a7 100644 --- a/test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp +++ b/test/buildtool/execution_engine/executor/executor_api_remote_bazel.test.cpp @@ -15,10 +15,10 @@ #include <optional> #include "catch2/catch_test_macros.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_api.hpp" #include "src/buildtool/execution_api/remote/config.hpp" @@ -41,7 +41,7 @@ TEST_CASE("Executor<BazelApi>: Upload blob", "[executor]") { RetryConfig retry_config{}; // default retry config - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -72,7 +72,7 @@ TEST_CASE("Executor<BazelApi>: Compile hello world", "[executor]") { RetryConfig retry_config{}; // default retry config - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -110,7 +110,7 @@ TEST_CASE("Executor<BazelApi>: Compile greeter", "[executor]") { RetryConfig retry_config{}; // default retry config - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -148,7 +148,7 @@ TEST_CASE("Executor<BazelApi>: Upload and download trees", "[executor]") { RetryConfig retry_config{}; // default retry config - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; @@ -186,7 +186,7 @@ TEST_CASE("Executor<BazelApi>: Retrieve output directories", "[executor]") { RetryConfig retry_config{}; // default retry config - HashFunction const hash_function{Compatibility::IsCompatible() + HashFunction const hash_function{ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1}; diff --git a/test/buildtool/execution_engine/traverser/TARGETS b/test/buildtool/execution_engine/traverser/TARGETS index bdd7c4cc..7228b0af 100644 --- a/test/buildtool/execution_engine/traverser/TARGETS +++ b/test/buildtool/execution_engine/traverser/TARGETS @@ -7,11 +7,11 @@ , ["", "catch-main"] , ["utils", "container_matchers"] , ["@", "src", "src/buildtool/common", "common"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/common", "artifact_description"] , ["@", "src", "src/buildtool/execution_engine/dag", "dag"] , ["@", "src", "src/buildtool/execution_engine/traverser", "traverser"] , ["@", "src", "src/buildtool/crypto", "hash_function"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] ] , "stage": ["test", "buildtool", "execution_engine", "traverser"] } diff --git a/test/buildtool/execution_engine/traverser/traverser.test.cpp b/test/buildtool/execution_engine/traverser/traverser.test.cpp index 70ab2465..7b2e6293 100644 --- a/test/buildtool/execution_engine/traverser/traverser.test.cpp +++ b/test/buildtool/execution_engine/traverser/traverser.test.cpp @@ -24,7 +24,7 @@ #include "catch2/catch_test_macros.hpp" #include "src/buildtool/common/artifact_description.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_engine/dag/dag.hpp" #include "test/utils/container_matchers.hpp" @@ -184,7 +184,7 @@ class TestProject { auto inputs_desc = ActionDescription::inputs_t{}; if (not inputs.empty()) { command.emplace_back("FROM"); - auto const hash_type = Compatibility::IsCompatible() + auto const hash_type = ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1; for (auto const& input_desc : inputs) { diff --git a/test/buildtool/file_system/TARGETS b/test/buildtool/file_system/TARGETS index a7342221..eda8f376 100644 --- a/test/buildtool/file_system/TARGETS +++ b/test/buildtool/file_system/TARGETS @@ -62,6 +62,7 @@ , ["@", "src", "src/buildtool/common", "artifact_description"] , ["@", "src", "src/buildtool/common", "common"] , ["@", "src", "src/buildtool/common", "artifact_digest_factory"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/crypto", "hash_function"] , ["@", "src", "src/buildtool/file_system", "file_root"] , ["@", "src", "src/buildtool/file_system", "file_system_manager"] diff --git a/test/buildtool/file_system/file_root.test.cpp b/test/buildtool/file_system/file_root.test.cpp index f709aa7a..1e7b9e7b 100644 --- a/test/buildtool/file_system/file_root.test.cpp +++ b/test/buildtool/file_system/file_root.test.cpp @@ -25,6 +25,7 @@ #include "src/buildtool/common/artifact_description.hpp" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/artifact_digest_factory.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "test/utils/container_matchers.hpp" @@ -412,7 +413,7 @@ static void CheckGitRoot(bool ignore_special) noexcept { auto const foo = root->ToArtifactDescription("baz/foo", "repo"); REQUIRE(foo); - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { auto const digest = ArtifactDigestFactory::Create(HashFunction::Type::PlainSHA256, kFooIdSha256, @@ -435,7 +436,7 @@ static void CheckGitRoot(bool ignore_special) noexcept { auto const bar = root->ToArtifactDescription("baz/bar", "repo"); REQUIRE(bar); - if (Compatibility::IsCompatible()) { + if (ProtocolTraits::Instance().IsCompatible()) { auto const digest = ArtifactDigestFactory::Create(HashFunction::Type::PlainSHA256, kBarIdSha256, diff --git a/test/buildtool/graph_traverser/TARGETS b/test/buildtool/graph_traverser/TARGETS index fcf2da20..d9dd7af6 100644 --- a/test/buildtool/graph_traverser/TARGETS +++ b/test/buildtool/graph_traverser/TARGETS @@ -7,6 +7,7 @@ , ["@", "json", "", "json"] , ["@", "src", "src/buildtool/auth", "auth"] , ["@", "src", "src/buildtool/common", "common"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/common/remote", "retry_config"] , ["@", "src", "src/buildtool/execution_api/local", "config"] , ["@", "src", "src/buildtool/execution_api/local", "context"] @@ -39,6 +40,7 @@ , ["@", "src", "src/buildtool/execution_api/remote", "config"] , ["@", "src", "src/buildtool/storage", "config"] , ["@", "src", "src/buildtool/storage", "storage"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] ] , "stage": ["test", "buildtool", "graph_traverser"] } @@ -56,6 +58,7 @@ , ["@", "src", "src/buildtool/storage", "storage"] , ["@", "src", "src/buildtool/storage", "config"] , ["@", "src", "src/buildtool/crypto", "hash_function"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] ] , "stage": ["test", "buildtool", "graph_traverser"] } diff --git a/test/buildtool/graph_traverser/graph_traverser.test.hpp b/test/buildtool/graph_traverser/graph_traverser.test.hpp index 28ec44e0..666b905f 100644 --- a/test/buildtool/graph_traverser/graph_traverser.test.hpp +++ b/test/buildtool/graph_traverser/graph_traverser.test.hpp @@ -29,6 +29,7 @@ #include "gsl/gsl" #include "nlohmann/json.hpp" #include "src/buildtool/auth/authentication.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/common/statistics.hpp" #include "src/buildtool/execution_api/common/api_bundle.hpp" @@ -127,7 +128,7 @@ class TestProject { CommandLineArguments clargs{gtargs}; clargs.artifacts = entry_points; auto const comp_graph = root_dir_ / "graph_description_compatible"; - if (Compatibility::IsCompatible() and + if (ProtocolTraits::Instance().IsCompatible() and FileSystemManager::Exists(comp_graph)) { clargs.graph_description = comp_graph; } diff --git a/test/buildtool/graph_traverser/graph_traverser_remote.test.cpp b/test/buildtool/graph_traverser/graph_traverser_remote.test.cpp index d92b9ef9..bf3dfe02 100644 --- a/test/buildtool/graph_traverser/graph_traverser_remote.test.cpp +++ b/test/buildtool/graph_traverser/graph_traverser_remote.test.cpp @@ -13,6 +13,7 @@ // limitations under the License. #include "catch2/catch_test_macros.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/remote/config.hpp" #include "src/buildtool/storage/config.hpp" @@ -34,7 +35,7 @@ StorageConfig::Builder builder; auto config = builder.SetBuildRoot(cache_dir) - .SetHashType(Compatibility::IsCompatible() + .SetHashType(ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1) .SetRemoteExecutionArgs(remote_config.remote_address, diff --git a/test/buildtool/storage/TARGETS b/test/buildtool/storage/TARGETS index 5eeafa9a..7b58b109 100644 --- a/test/buildtool/storage/TARGETS +++ b/test/buildtool/storage/TARGETS @@ -58,6 +58,7 @@ , ["@", "src", "src/buildtool/storage", "config"] , ["utils", "test_storage_config"] , ["@", "src", "src/buildtool/common", "bazel_types"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["utils", "large_object_utils"] , ["@", "src", "src/utils/cpp", "tmp_dir"] , [ "@" @@ -65,7 +66,6 @@ , "src/buildtool/execution_api/bazel_msg" , "bazel_msg_factory" ] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] ] , "stage": ["test", "buildtool", "storage"] } diff --git a/test/buildtool/storage/large_object_cas.test.cpp b/test/buildtool/storage/large_object_cas.test.cpp index f0644694..cbc92038 100644 --- a/test/buildtool/storage/large_object_cas.test.cpp +++ b/test/buildtool/storage/large_object_cas.test.cpp @@ -28,7 +28,7 @@ #include "catch2/catch_test_macros.hpp" #include "src/buildtool/common/bazel_types.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/file_system/object_type.hpp" @@ -405,7 +405,7 @@ static void TestExternal(StorageConfig const& storage_config, REQUIRE(FileSystemManager::IsFile(path)); } - if (kIsTree and not Compatibility::IsCompatible()) { + if (kIsTree and not ProtocolTraits::Instance().IsCompatible()) { // Tree invariants check is omitted in compatible mode. SECTION("Tree invariants check fails") { // Check splice fails due to the tree invariants check. @@ -606,7 +606,7 @@ TEST_CASE("LargeObjectCAS: uplink nested large objects", "[storage]") { // However, in native mode they might be reconstructed on request because // their entries are in the latest generation: - if (not Compatibility::IsCompatible()) { + if (not ProtocolTraits::Instance().IsCompatible()) { auto split_nested_tree_2 = latest.CAS().SplitTree(*nested_tree_digest); REQUIRE(split_nested_tree_2); @@ -720,7 +720,7 @@ auto Tree::StoreRaw(LocalCAS<kDefaultDoGlobalUplink> const& cas, return cas.StoreBlob(content); }; - return Compatibility::IsCompatible() + return ProtocolTraits::Instance().IsCompatible() ? BazelMsgFactory::CreateDirectoryDigestFromLocalTree( directory, store_blob, store_tree, store_symlink) : BazelMsgFactory::CreateGitTreeDigestFromLocalTree( diff --git a/test/utils/TARGETS b/test/utils/TARGETS index 9daecce8..d0a427a6 100644 --- a/test/utils/TARGETS +++ b/test/utils/TARGETS @@ -38,7 +38,7 @@ , "hdrs": ["test_env.hpp"] , "deps": [ "log_config" - , ["@", "src", "src/buildtool/compatibility", "compatibility"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , ["@", "src", "src/buildtool/auth", "auth"] ] , "stage": ["test", "utils"] @@ -54,6 +54,7 @@ , ["@", "src", "src/buildtool/storage", "config"] , ["@", "src", "src/utils/cpp", "tmp_dir"] , ["@", "src", "src/buildtool/crypto", "hash_function"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] ] , "stage": ["test", "utils"] } @@ -134,7 +135,7 @@ , ["@", "src", "src/buildtool/logging", "logging"] , ["@", "src", "src/buildtool/storage", "storage"] , ["@", "src", "src/buildtool/file_system", "file_system_manager"] - , ["@", "src", "src/buildtool/compatibility", "compatibility"] + , ["@", "src", "src/buildtool/common", "protocol_traits"] , "shell_quoting" , "log_config" , "test_env" diff --git a/test/utils/hermeticity/test_storage_config.hpp b/test/utils/hermeticity/test_storage_config.hpp index 4bcbc1be..4820782f 100644 --- a/test/utils/hermeticity/test_storage_config.hpp +++ b/test/utils/hermeticity/test_storage_config.hpp @@ -21,6 +21,7 @@ #include <utility> //std::move #include "gsl/gsl" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" @@ -53,7 +54,7 @@ class TestStorageConfig final { StorageConfig::Builder builder; auto config = builder.SetBuildRoot(temp_dir->GetPath()) - .SetHashType(Compatibility::IsCompatible() + .SetHashType(ProtocolTraits::Instance().IsCompatible() ? HashFunction::Type::PlainSHA256 : HashFunction::Type::GitSHA1) .Build(); diff --git a/test/utils/serve_service/main-serve.cpp b/test/utils/serve_service/main-serve.cpp index 5a08eb89..2868e354 100644 --- a/test/utils/serve_service/main-serve.cpp +++ b/test/utils/serve_service/main-serve.cpp @@ -23,7 +23,7 @@ #include "catch2/catch_session.hpp" #include "catch2/catch_test_macros.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "src/buildtool/execution_api/remote/config.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/logging/log_level.hpp" diff --git a/test/utils/test_env.hpp b/test/utils/test_env.hpp index 30eba26c..fc6ac739 100644 --- a/test/utils/test_env.hpp +++ b/test/utils/test_env.hpp @@ -23,7 +23,7 @@ #include <string> #include "src/buildtool/auth/authentication.hpp" -#include "src/buildtool/compatibility/compatibility.hpp" +#include "src/buildtool/common/protocol_traits.hpp" #include "test/utils/logging/log_config.hpp" [[nodiscard]] static inline auto ReadPlatformPropertiesFromEnv() @@ -43,7 +43,7 @@ static inline void ReadCompatibilityFromEnv() { auto* compatible = std::getenv("COMPATIBLE"); if (compatible != nullptr) { - Compatibility::SetCompatible(); + ProtocolTraits::Instance().SetCompatible(); } } |