aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Luis Fernando Pino Duque <lpino@google.com>2016-10-28 15:17:22 +0000
committerGravatar John Cater <jcater@google.com>2016-10-28 16:04:30 +0000
commit8949c07973c52fb5c3f0ff8558c3254c3bad50b4 (patch)
treea8d70a79fcb6d129741a9978017ddcf3176b2e26 /src
parent6d46bdf0782db5ec1a43a352408401664ae9c630 (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.cc31
-rw-r--r--src/main/cpp/startup_options.h15
-rw-r--r--src/test/cpp/startup_options_test.cc25
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