Adds --[no]use_action_cache startup option to disable the action cache.

Disabling the action cache is helpful in contexts where incremental builds are
not required, or where actions need to be repeatedly executed for debugging.

--
PiperOrigin-RevId: 147485055
MOS_MIGRATED_REVID=147485055
diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc
index 4240be5..bfb8e15 100644
--- a/src/main/cpp/blaze.cc
+++ b/src/main/cpp/blaze.cc
@@ -482,6 +482,11 @@
   } else {
     result.push_back("--use_custom_exit_code_on_abrupt_exit=false");
   }
+  if (globals->options->use_action_cache) {
+    result.push_back("--use_action_cache=true");
+  } else {
+    result.push_back("--use_action_cache=false");
+  }
 
   // This is only for Blaze reporting purposes; the real interpretation of the
   // jvm flags occurs when we set up the java command line.
diff --git a/src/main/cpp/startup_options.cc b/src/main/cpp/startup_options.cc
index f54c900..a78b559 100644
--- a/src/main/cpp/startup_options.cc
+++ b/src/main/cpp/startup_options.cc
@@ -38,7 +38,7 @@
     : StartupOptions("Bazel", workspace_layout) {}
 
 StartupOptions::StartupOptions(const string &product_name,
-                               const WorkspaceLayout* workspace_layout)
+                               const WorkspaceLayout *workspace_layout)
     : product_name(product_name),
       deep_execroot(true),
       block_for_lock(true),
@@ -57,7 +57,8 @@
       invocation_policy(NULL),
       client_debug(false),
       use_custom_exit_code_on_abrupt_exit(true),
-      java_logging_formatter("java.util.logging.SimpleFormatter") {
+      java_logging_formatter("java.util.logging.SimpleFormatter"),
+      use_action_cache(true) {
   bool testing = !blaze::GetEnv("TEST_TMPDIR").empty();
   if (testing) {
     output_root = MakeAbsolute(blaze::GetEnv("TEST_TMPDIR"));
@@ -83,7 +84,8 @@
                      "write_command_log",
                      "watchfs",
                      "client_debug",
-                     "use_custom_exit_code_on_abrupt_exit"};
+                     "use_custom_exit_code_on_abrupt_exit",
+                     "use_action_cache"};
   unary_options = {"output_base", "install_base",
       "output_user_root", "host_jvm_profile", "host_javabase",
       "host_jvm_args", "bazelrc", "blazerc", "io_nice_level",
@@ -283,6 +285,12 @@
   } else if (GetNullaryOption(arg, "--nouse_custom_exit_code_on_abrupt_exit")) {
     use_custom_exit_code_on_abrupt_exit = false;
     option_sources["use_custom_exit_code_on_abrupt_exit"] = rcfile;
+  } else if (GetNullaryOption(arg, "--nouse_action_cache")) {
+    use_action_cache = false;
+    option_sources["use_action_cache"] = rcfile;
+  } else if (GetNullaryOption(arg, "--use_action_cache")) {
+    use_action_cache = true;
+    option_sources["use_action_cache"] = rcfile;
   } else if ((value = GetUnaryOption(
       arg, next_arg, "--connect_timeout_secs")) != NULL) {
     if (!blaze_util::safe_strto32(value, &connect_timeout_secs) ||
diff --git a/src/main/cpp/startup_options.h b/src/main/cpp/startup_options.h
index 7bde6e7..cddebe3 100644
--- a/src/main/cpp/startup_options.h
+++ b/src/main/cpp/startup_options.h
@@ -215,6 +215,9 @@
   // Value of the java.util.logging.FileHandler.formatter Java property.
   std::string java_logging_formatter;
 
+  // Whether to use the action cache.
+  bool use_action_cache;
+
  protected:
   // Constructor for subclasses only so that site-specific extensions of this
   // class can override the product name.  The product_name must be the