diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/other_tools/just_mr/cli.hpp | 5 | ||||
-rw-r--r-- | src/other_tools/just_mr/launch.cpp | 11 | ||||
-rw-r--r-- | src/other_tools/just_mr/launch.hpp | 1 | ||||
-rw-r--r-- | src/other_tools/just_mr/main.cpp | 1 | ||||
-rw-r--r-- | src/other_tools/just_mr/rc.cpp | 24 | ||||
-rw-r--r-- | src/other_tools/just_mr/utils.hpp | 27 |
6 files changed, 60 insertions, 9 deletions
diff --git a/src/other_tools/just_mr/cli.hpp b/src/other_tools/just_mr/cli.hpp index bcd5302a..1a77bc62 100644 --- a/src/other_tools/just_mr/cli.hpp +++ b/src/other_tools/just_mr/cli.hpp @@ -92,6 +92,10 @@ struct MultiRepoRemoteAuthArguments { std::optional<std::filesystem::path> tls_client_key{std::nullopt}; }; +struct ForwardOnlyArguments { + std::vector<std::string> remote_execution_properties{}; +}; + enum class SubCommand { kUnknown, kMRVersion, @@ -112,6 +116,7 @@ struct CommandLineArguments { MultiRepoUpdateArguments update; MultiRepoJustSubCmdsArguments just_cmd; MultiRepoRemoteAuthArguments auth; + ForwardOnlyArguments launch_fwd; }; static inline void SetupMultiRepoCommonArguments( diff --git a/src/other_tools/just_mr/launch.cpp b/src/other_tools/just_mr/launch.cpp index f8f14659..7a7975e7 100644 --- a/src/other_tools/just_mr/launch.cpp +++ b/src/other_tools/just_mr/launch.cpp @@ -35,6 +35,7 @@ auto CallJust(std::optional<std::filesystem::path> const& config_file, MultiRepoJustSubCmdsArguments const& just_cmd_args, MultiRepoLogArguments const& log_args, MultiRepoRemoteAuthArguments const& auth_args, + ForwardOnlyArguments const& launch_fwd, bool forward_build_root, std::string multi_repo_tool_name) -> int { // check if subcmd_name can be taken from additional args @@ -50,6 +51,7 @@ auto CallJust(std::optional<std::filesystem::path> const& config_file, bool use_launcher{false}; bool supports_defines{false}; bool supports_remote{false}; + bool supports_remote_properties{false}; bool supports_serve{false}; bool supports_dispatch{false}; bool supports_cacert{false}; @@ -89,6 +91,8 @@ auto CallJust(std::optional<std::filesystem::path> const& config_file, use_launcher = kKnownJustSubcommands.at(*subcommand).launch; supports_defines = kKnownJustSubcommands.at(*subcommand).defines; supports_remote = kKnownJustSubcommands.at(*subcommand).remote; + supports_remote_properties = + kKnownJustSubcommands.at(*subcommand).remote_props; supports_serve = kKnownJustSubcommands.at(*subcommand).serve; supports_dispatch = kKnownJustSubcommands.at(*subcommand).dispatch; supports_cacert = kKnownJustSubcommands.at(*subcommand).cacert; @@ -190,6 +194,13 @@ auto CallJust(std::optional<std::filesystem::path> const& config_file, cmd.emplace_back(auth_args.tls_client_key->string()); } } + // forward-only arguments, still to come before the just-arguments + if (supports_remote_properties) { + for (auto const& prop : launch_fwd.remote_execution_properties) { + cmd.emplace_back("--remote-execution-property"); + cmd.emplace_back(prop); + } + } // add args read from just-mrrc if (subcommand and just_cmd_args.just_args.contains(*subcommand)) { for (auto const& subcmd_arg : just_cmd_args.just_args.at(*subcommand)) { diff --git a/src/other_tools/just_mr/launch.hpp b/src/other_tools/just_mr/launch.hpp index 11559ffe..0560f42e 100644 --- a/src/other_tools/just_mr/launch.hpp +++ b/src/other_tools/just_mr/launch.hpp @@ -28,6 +28,7 @@ MultiRepoJustSubCmdsArguments const& just_cmd_args, MultiRepoLogArguments const& log_args, MultiRepoRemoteAuthArguments const& auth_args, + ForwardOnlyArguments const& launch_fwd, bool forward_build_root, std::string multi_repo_tool_name) -> int; diff --git a/src/other_tools/just_mr/main.cpp b/src/other_tools/just_mr/main.cpp index e42f5eca..2d1c7328 100644 --- a/src/other_tools/just_mr/main.cpp +++ b/src/other_tools/just_mr/main.cpp @@ -333,6 +333,7 @@ auto main(int argc, char* argv[]) -> int { arguments.just_cmd, arguments.log, arguments.auth, + arguments.launch_fwd, forward_build_root, my_name); } diff --git a/src/other_tools/just_mr/rc.cpp b/src/other_tools/just_mr/rc.cpp index 209e4be6..8985c958 100644 --- a/src/other_tools/just_mr/rc.cpp +++ b/src/other_tools/just_mr/rc.cpp @@ -359,6 +359,30 @@ namespace { clargs->just_cmd.just_args[cmd_name] = std::move(args); } } + // read remote-execution properties, used for extending the launch + // command-line (not settable on just-mr's command line). + auto re_props = rc_config["remote-execution properties"]; + if (re_props.IsNotNull()) { + if (not re_props->IsList()) { + Logger::Log(LogLevel::Error, + "Configuration-file provided remote-execution " + "properties have to be a list of strings, but found {}", + re_props->ToString()); + std::exit(kExitConfigError); + } + for (auto const& entry : re_props->List()) { + if (not entry->IsString()) { + Logger::Log( + LogLevel::Error, + "Configuration-file provided remote-execution properties " + "have to be a list of strings, but found entry {}", + entry->ToString()); + std::exit(kExitConfigError); + } + clargs->launch_fwd.remote_execution_properties.emplace_back( + entry->String()); + } + } // read default for local launcher if (not clargs->common.local_launcher) { auto launcher = rc_config["local launcher"]; diff --git a/src/other_tools/just_mr/utils.hpp b/src/other_tools/just_mr/utils.hpp index fa7c82b7..36a03ddf 100644 --- a/src/other_tools/just_mr/utils.hpp +++ b/src/other_tools/just_mr/utils.hpp @@ -45,15 +45,16 @@ std::vector<std::string> const kTakeOver = {"bindings", "expression_file_name"}; struct JustSubCmdFlags { - bool config; // requires setup - bool build_root; // supports the local build root arg - bool launch; // supports the local launcher arg - bool defines; // supports defines arg - bool remote; // supports remote exec args - bool serve; // supports a serve endpoint - bool dispatch; // supports dispatching of the remote-execution endpoint - bool cacert; // supports CA cert arg - bool client_auth; // supports client auth args + bool config; // requires setup + bool build_root; // supports the local build root arg + bool launch; // supports the local launcher arg + bool defines; // supports defines arg + bool remote; // supports remote exec args + bool remote_props; // supports remote-execution properties + bool serve; // supports a serve endpoint + bool dispatch; // supports dispatching of the remote-execution endpoint + bool cacert; // supports CA cert arg + bool client_auth; // supports client auth args }; // ordered, so that we have replicability @@ -64,6 +65,7 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{ .launch = false, .defines = false, .remote = false, + .remote_props = false, .serve = false, .dispatch = false, .cacert = false, @@ -74,6 +76,7 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{ .launch = false, .defines = true, .remote = false, + .remote_props = false, .serve = false, .dispatch = false, .cacert = false, @@ -84,6 +87,7 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{ .launch = false, .defines = true, .remote = true, + .remote_props = true, .serve = true, .dispatch = true, .cacert = false, @@ -94,6 +98,7 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{ .launch = true, .defines = true, .remote = true, + .remote_props = true, .serve = true, .dispatch = true, .cacert = true, @@ -104,6 +109,7 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{ .launch = true, .defines = true, .remote = true, + .remote_props = true, .serve = true, .dispatch = true, .cacert = true, @@ -114,6 +120,7 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{ .launch = true, .defines = true, .remote = true, + .remote_props = true, .serve = true, .dispatch = true, .cacert = true, @@ -124,6 +131,7 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{ .launch = false, .defines = false, .remote = true, + .remote_props = false, .serve = false, .dispatch = false, .cacert = true, @@ -134,6 +142,7 @@ std::map<std::string, JustSubCmdFlags> const kKnownJustSubcommands{ .launch = false, .defines = false, .remote = false, + .remote_props = false, .serve = false, .dispatch = false, .cacert = false, |