summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/common/TARGETS2
-rw-r--r--src/buildtool/common/cli.hpp15
-rw-r--r--src/buildtool/main/TARGETS2
-rw-r--r--src/buildtool/main/cli.cpp14
-rw-r--r--src/buildtool/main/cli.hpp1
-rw-r--r--src/buildtool/main/main.cpp30
-rw-r--r--src/buildtool/main/serve.cpp4
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