Add the IsNullary(arg) and IsUnary(arg, next_arg) functions to detect whether arg is a valid startup option. -- MOS_MIGRATED_REVID=137512954
diff --git a/src/main/cpp/startup_options.cc b/src/main/cpp/startup_options.cc index 06b941d..6efeccc 100644 --- a/src/main/cpp/startup_options.cc +++ b/src/main/cpp/startup_options.cc
@@ -65,10 +65,41 @@ output_root, "_" + product_name_lower + "_" + GetUserName()); // 3 hours (but only 15 seconds if used within a test) max_idle_secs = testing ? 15 : (3 * 3600); + nullary_options = {"deep_execroot", "block_for_lock", + "host_jvm_debug", "master_blazerc", "master_bazelrc", "batch", + "batch_cpu_scheduling", "allow_configurable_attributes", + "fatal_event_bus_exceptions", "experimental_oom_more_eagerly", + "write_command_log", "watchfs"}; + unary_options = {"output_base", "install_base", + "output_user_root", "host_jvm_profile", "host_javabase", + "host_jvm_args", "bazelrc", "blazerc", "io_nice_level", + "max_idle_secs", "experimental_oom_more_eagerly_threshold", + "command_port", "invocation_policy"}; } StartupOptions::~StartupOptions() {} +bool StartupOptions::IsNullary(const string &arg) const { + for (string option : nullary_options) { + if (GetNullaryOption(arg.c_str(), ("--" + option).c_str()) || + GetNullaryOption(arg.c_str(), ("--no" + option).c_str())) { + return true; + } + } + return false; +} + +bool StartupOptions::IsUnary(const string &arg, + const string &next_arg) const { + for (string option : unary_options) { + if (GetUnaryOption(arg.c_str(), next_arg.c_str(), + ("--" + option).c_str()) != NULL) { + return true; + } + } + return false; +} + void StartupOptions::AddExtraOptions(vector<string> *result) const {} blaze_exit_code::ExitCode StartupOptions::ProcessArg(
diff --git a/src/main/cpp/startup_options.h b/src/main/cpp/startup_options.h index 7754dad..3a90b50 100644 --- a/src/main/cpp/startup_options.h +++ b/src/main/cpp/startup_options.h
@@ -116,6 +116,15 @@ const std::string &host_javabase, std::vector<std::string> *result, const std::vector<std::string> &user_options, std::string *error) const; + // Checks whether the argument is a valid nullary option. + // E.g. --master_bazelrc, --nomaster_bazelrc. + bool IsNullary(const std::string &arg) const; + + // Checks whether the argument is a valid unary option. + // E.g. --blazerc=foo, --blazerc foo. + bool IsUnary(const std::string &arg, + const std::string &next_arg) const; + // The capitalized name of this binary. const std::string product_name; @@ -207,6 +216,12 @@ // capitalized version of the name, as in "Bazel". explicit StartupOptions(const std::string &product_name); + // Holds the valid nullary startup options. + std::vector<std::string> nullary_options; + + // Holds the valid unary startup options. + std::vector<std::string> unary_options; + private: std::string host_javabase; };
diff --git a/src/test/cpp/startup_options_test.cc b/src/test/cpp/startup_options_test.cc index 5658c1a..0291dfc 100644 --- a/src/test/cpp/startup_options_test.cc +++ b/src/test/cpp/startup_options_test.cc
@@ -74,4 +74,29 @@ ASSERT_EQ("/tmp", startup_options.output_root); } +TEST_F(StartupOptionsTest, IsNullaryTest) { + blaze::StartupOptions startup_options; + ASSERT_TRUE(startup_options.IsNullary("--master_bazelrc")); + ASSERT_TRUE(startup_options.IsNullary("--nomaster_bazelrc")); + ASSERT_FALSE(startup_options.IsNullary("")); + ASSERT_FALSE(startup_options.IsNullary("--")); + ASSERT_FALSE(startup_options.IsNullary("--master_bazelrcascasc")); + string error_msg = std::string("In argument '--master_bazelrc=foo': option ") + + std::string("'--master_bazelrc' does not take a value"); + ASSERT_DEATH(startup_options.IsNullary("--master_bazelrc=foo"), + error_msg.c_str()); +} + +TEST_F(StartupOptionsTest, IsUnaryTest) { + blaze::StartupOptions startup_options; + ASSERT_FALSE(startup_options.IsUnary("", "")); + ASSERT_FALSE(startup_options.IsUnary("--", "")); + + ASSERT_TRUE(startup_options.IsUnary("--blazerc=foo", "--blah")); + ASSERT_TRUE(startup_options.IsUnary("--blazerc", "foo")); + ASSERT_TRUE(startup_options.IsUnary("--blazerc=", "--foo")); + ASSERT_TRUE(startup_options.IsUnary("--blazerc", "")); + ASSERT_FALSE(startup_options.IsUnary("--blazercfooblah", "foo")); +} + } // namespace blaze