diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/common/TARGETS | 2 | ||||
-rw-r--r-- | src/buildtool/common/cli.hpp | 15 | ||||
-rw-r--r-- | src/buildtool/main/TARGETS | 2 | ||||
-rw-r--r-- | src/buildtool/main/cli.cpp | 14 | ||||
-rw-r--r-- | src/buildtool/main/cli.hpp | 1 | ||||
-rw-r--r-- | src/buildtool/main/main.cpp | 30 | ||||
-rw-r--r-- | src/buildtool/main/serve.cpp | 4 |
7 files changed, 37 insertions, 31 deletions
diff --git a/src/buildtool/common/TARGETS b/src/buildtool/common/TARGETS index 4372db88..1d86a157 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/common", "protocol_traits"] + , ["src/buildtool/crypto", "hash_function"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] , ["src/buildtool/main", "build_utils"] diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp index c388879e..520b8ff3 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/crypto/hash_function.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/main/build_utils.hpp" #include "src/utils/cpp/path.hpp" @@ -192,6 +192,10 @@ struct ToAddArguments { bool follow_symlinks{}; }; +struct ProtocolArguments final { + HashFunction::Type hash_type = HashFunction::Type::GitSHA1; +}; + static inline auto SetupCommonArguments( gsl::not_null<CLI::App*> const& app, gsl::not_null<CommonArguments*> const& clargs) { @@ -682,11 +686,14 @@ static inline auto SetupGraphArguments( "missing KNOWN artifacts."); } -static inline auto SetupCompatibilityArguments( - gsl::not_null<CLI::App*> const& app) { +static inline auto SetupProtocolArguments( + gsl::not_null<CLI::App*> const& app, + gsl::not_null<ProtocolArguments*> const& protocol) { app->add_flag_function( "--compatible", - [](auto /*unused*/) { ProtocolTraits::Instance().SetCompatible(); }, + [protocol](auto /*unused*/) { + protocol->hash_type = HashFunction::Type::PlainSHA256; + }, "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/main/TARGETS b/src/buildtool/main/TARGETS index f3e1db5b..dcf181af 100644 --- a/src/buildtool/main/TARGETS +++ b/src/buildtool/main/TARGETS @@ -293,11 +293,11 @@ [ ["@", "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"] , "common" + , ["src/buildtool/crypto", "hash_function"] ] } , "build_utils": diff --git a/src/buildtool/main/cli.cpp b/src/buildtool/main/cli.cpp index 759c7124..8163abd4 100644 --- a/src/buildtool/main/cli.cpp +++ b/src/buildtool/main/cli.cpp @@ -33,7 +33,7 @@ auto SetupDescribeCommandArguments( SetupCommonAuthArguments(app, &clargs->auth); SetupClientAuthArguments(app, &clargs->cauth); SetupExecutionEndpointArguments(app, &clargs->endpoint); - SetupCompatibilityArguments(app); + SetupProtocolArguments(app, &clargs->protocol); SetupDescribeArguments(app, &clargs->describe); SetupRetryArguments(app, &clargs->retry); } @@ -52,7 +52,7 @@ auto SetupAnalyseCommandArguments( SetupCommonAuthArguments(app, &clargs->auth); SetupClientAuthArguments(app, &clargs->cauth); SetupDiagnosticArguments(app, &clargs->diagnose); - SetupCompatibilityArguments(app); + SetupProtocolArguments(app, &clargs->protocol); SetupRetryArguments(app, &clargs->retry); } @@ -72,7 +72,7 @@ auto SetupBuildCommandArguments( SetupCommonBuildArguments(app, &clargs->build); SetupBuildArguments(app, &clargs->build); SetupTCArguments(app, &clargs->tc); - SetupCompatibilityArguments(app); + SetupProtocolArguments(app, &clargs->protocol); SetupRetryArguments(app, &clargs->retry); } @@ -96,7 +96,7 @@ auto SetupRebuildCommandArguments( auto SetupInstallCasCommandArguments( gsl::not_null<CLI::App*> const& app, gsl::not_null<CommandLineArguments*> const& clargs) { - SetupCompatibilityArguments(app); + SetupProtocolArguments(app, &clargs->protocol); SetupCacheArguments(app, &clargs->endpoint); SetupExecutionEndpointArguments(app, &clargs->endpoint); SetupCommonAuthArguments(app, &clargs->auth); @@ -110,7 +110,7 @@ auto SetupInstallCasCommandArguments( auto SetupAddToCasCommandArguments( gsl::not_null<CLI::App*> const& app, gsl::not_null<CommandLineArguments*> const& clargs) { - SetupCompatibilityArguments(app); + SetupProtocolArguments(app, &clargs->protocol); SetupCacheArguments(app, &clargs->endpoint); SetupExecutionEndpointArguments(app, &clargs->endpoint); SetupCommonAuthArguments(app, &clargs->auth); @@ -135,7 +135,7 @@ auto SetupTraverseCommandArguments( SetupCommonBuildArguments(app, &clargs->build); SetupBuildArguments(app, &clargs->build); SetupStageArguments(app, &clargs->stage); - SetupCompatibilityArguments(app); + SetupProtocolArguments(app, &clargs->protocol); } /// \brief Setup arguments for sub command "just gc". @@ -151,7 +151,7 @@ auto SetupGcCommandArguments( auto SetupExecutionServiceCommandArguments( gsl::not_null<CLI::App*> const& app, gsl::not_null<CommandLineArguments*> const& clargs) { - SetupCompatibilityArguments(app); + SetupProtocolArguments(app, &clargs->protocol); SetupCommonBuildArguments(app, &clargs->build); SetupCacheArguments(app, &clargs->endpoint); SetupServiceArguments(app, &clargs->service); diff --git a/src/buildtool/main/cli.hpp b/src/buildtool/main/cli.hpp index 4c28b1f6..c2d14ba9 100644 --- a/src/buildtool/main/cli.hpp +++ b/src/buildtool/main/cli.hpp @@ -55,6 +55,7 @@ struct CommandLineArguments { RetryArguments retry; GcArguments gc; ToAddArguments to_add; + ProtocolArguments protocol; }; auto ParseCommandLineArguments(int argc, diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp index bb97fc44..a972b80b 100644 --- a/src/buildtool/main/main.cpp +++ b/src/buildtool/main/main.cpp @@ -113,7 +113,7 @@ void SetupLogging(LogArguments const& clargs) { [[nodiscard]] auto CreateStorageConfig( EndpointArguments const& eargs, - bool is_compatible, + HashFunction::Type hash_type, std::optional<ServerAddress> const& remote_address = std::nullopt, ExecutionProperties const& remote_platform_properties = {}, std::vector<DispatchEndpoint> const& remote_dispatch = {}) noexcept @@ -124,9 +124,7 @@ void SetupLogging(LogArguments const& clargs) { } auto config = - builder - .SetHashType(is_compatible ? HashFunction::Type::PlainSHA256 - : HashFunction::Type::GitSHA1) + builder.SetHashType(hash_type) .SetRemoteExecutionArgs( remote_address, remote_platform_properties, remote_dispatch) .Build(); @@ -765,7 +763,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, ProtocolTraits::Instance().IsCompatible()); + arguments.endpoint, arguments.protocol.hash_type); if (not storage_config) { return kExitFailure; } @@ -803,8 +801,7 @@ auto main(int argc, char* argv[]) -> int { // Set up storage for local execution. auto const storage_config = CreateStorageConfig( - arguments.endpoint, - ProtocolTraits::Instance().IsCompatible()); + arguments.endpoint, arguments.protocol.hash_type); if (not storage_config) { return kExitFailure; } @@ -866,12 +863,12 @@ auto main(int argc, char* argv[]) -> int { } // Set up storage for serve operation. - auto const storage_config = CreateStorageConfig( - arguments.endpoint, - ProtocolTraits::Instance().IsCompatible(), - remote_exec_config->remote_address, - remote_exec_config->platform_properties, - remote_exec_config->dispatch); + auto const storage_config = + CreateStorageConfig(arguments.endpoint, + arguments.protocol.hash_type, + remote_exec_config->remote_address, + remote_exec_config->platform_properties, + remote_exec_config->dispatch); if (not storage_config) { return kExitFailure; } @@ -943,7 +940,7 @@ auto main(int argc, char* argv[]) -> int { // correctly-sharded target cache. auto const storage_config = CreateStorageConfig(arguments.endpoint, - ProtocolTraits::Instance().IsCompatible(), + arguments.protocol.hash_type, remote_exec_config->remote_address, remote_exec_config->platform_properties, remote_exec_config->dispatch); @@ -951,7 +948,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, ProtocolTraits::Instance().IsCompatible()); + arguments.endpoint, arguments.protocol.hash_type); #endif // BOOTSTRAP_BUILD_TOOL if (not storage_config) { return kExitFailure; @@ -1042,7 +1039,8 @@ auto main(int argc, char* argv[]) -> int { if (arguments.cmd == SubCommand::kTraverse) { if (arguments.graph.git_cas) { - if (ProtocolTraits::Instance().IsCompatible()) { + if (not ProtocolTraits::IsNative( + arguments.protocol.hash_type)) { 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 66787a6e..ecd82f38 100644 --- a/src/buildtool/main/serve.cpp +++ b/src/buildtool/main/serve.cpp @@ -31,7 +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/crypto/hash_function.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" @@ -391,7 +391,7 @@ void ReadJustServeConfig(gsl::not_null<CommandLineArguments*> const& clargs) { } // compatibility is set immediately if flag is true if (compatible->Bool()) { - ProtocolTraits::Instance().SetCompatible(); + clargs->protocol.hash_type = HashFunction::Type::PlainSHA256; } } // read the address |