diff options
author | Luis Fernando Pino Duque <lpino@google.com> | 2016-10-28 15:17:22 +0000 |
---|---|---|
committer | John Cater <jcater@google.com> | 2016-10-28 16:04:30 +0000 |
commit | 8949c07973c52fb5c3f0ff8558c3254c3bad50b4 (patch) | |
tree | a8d70a79fcb6d129741a9978017ddcf3176b2e26 /src | |
parent | 6d46bdf0782db5ec1a43a352408401664ae9c630 (diff) |
Add the IsNullary(arg) and IsUnary(arg, next_arg) functions
to detect whether arg is a valid startup option.
--
MOS_MIGRATED_REVID=137512954
Diffstat (limited to 'src')
-rw-r--r-- | src/main/cpp/startup_options.cc | 31 | ||||
-rw-r--r-- | src/main/cpp/startup_options.h | 15 | ||||
-rw-r--r-- | src/test/cpp/startup_options_test.cc | 25 |
3 files changed, 71 insertions, 0 deletions
diff --git a/src/main/cpp/startup_options.cc b/src/main/cpp/startup_options.cc index 06b941d066..6efecccba6 100644 --- a/src/main/cpp/startup_options.cc +++ b/src/main/cpp/startup_options.cc @@ -65,10 +65,41 @@ StartupOptions::StartupOptions(const string &product_name) 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 7754dad1dd..3a90b501c4 100644 --- a/src/main/cpp/startup_options.h +++ b/src/main/cpp/startup_options.h @@ -116,6 +116,15 @@ class StartupOptions { 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 @@ class StartupOptions { // 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 5658c1ac28..0291dfcfbf 100644 --- a/src/test/cpp/startup_options_test.cc +++ b/src/test/cpp/startup_options_test.cc @@ -74,4 +74,29 @@ TEST_F(StartupOptionsTest, OutputRootUseBuiltin) { 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 |