summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/other_tools/just_mr/cli.hpp5
-rw-r--r--src/other_tools/just_mr/launch.cpp11
-rw-r--r--src/other_tools/just_mr/launch.hpp1
-rw-r--r--src/other_tools/just_mr/main.cpp1
-rw-r--r--src/other_tools/just_mr/rc.cpp24
-rw-r--r--src/other_tools/just_mr/utils.hpp27
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,