Update from Google.

--
MOE_MIGRATED_REVID=85702957
diff --git a/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java b/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java
new file mode 100644
index 0000000..58e360b
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/exec/ExecutionOptions.java
@@ -0,0 +1,195 @@
+// Copyright 2014 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.exec;
+
+import com.google.devtools.build.lib.actions.ResourceSet;
+import com.google.devtools.build.lib.packages.TestTimeout;
+import com.google.devtools.build.lib.rules.test.TestStrategy;
+import com.google.devtools.build.lib.rules.test.TestStrategy.TestOutputFormat;
+import com.google.devtools.build.lib.rules.test.TestStrategy.TestSummaryFormat;
+import com.google.devtools.build.lib.util.OptionsUtils;
+import com.google.devtools.build.lib.vfs.PathFragment;
+import com.google.devtools.common.options.Option;
+import com.google.devtools.common.options.Options;
+import com.google.devtools.common.options.OptionsBase;
+
+import java.util.Map;
+
+/**
+ * Options affecting the execution phase of a build.
+ *
+ * These options are interpreted by the BuildTool to choose an Executor to
+ * be used for the build.
+ *
+ * Note: from the user's point of view, the characteristic function of this
+ * set of options is indistinguishable from that of the BuildRequestOptions:
+ * they are all per-request.  The difference is only apparent in the
+ * implementation: these options are used only by the lib.exec machinery, which
+ * affects how C++ and Java compilation occur.  (The BuildRequestOptions
+ * contain a mixture of "semantic" options affecting the choice of targets to
+ * build, and "non-semantic" options affecting the lib.actions machinery.)
+ * Ideally, the user would be unaware of the difference.  For now, the usage
+ * strings are identical modulo "part 1", "part 2".
+ */
+public class ExecutionOptions extends OptionsBase {
+
+  public static final ExecutionOptions DEFAULTS = Options.getDefaults(ExecutionOptions.class);
+
+  @Option(name = "verbose_failures",
+          defaultValue = "false",
+          category = "verbosity",
+          help = "If a command fails, print out the full command line.")
+  public boolean verboseFailures;
+
+  @Option(name = "subcommands",
+      abbrev = 's',
+      defaultValue = "false",
+      category = "verbosity",
+      help = "Display the subcommands executed during a build.")
+  public boolean showSubcommands;
+
+  @Option(name = "check_up_to_date",
+          defaultValue = "false",
+          category = "what",
+          help = "Don't perform the build, just check if it is up-to-date.  If all targets are "
+          + "up-to-date, the build completes successfully.  If any step needs to be executed "
+          + "an error is reported and the build fails.")
+  public boolean checkUpToDate;
+
+  @Option(name = "check_tests_up_to_date",
+          defaultValue = "false",
+          category = "testing",
+          implicitRequirements = { "--check_up_to_date" },
+          help = "Don't run tests, just check if they are up-to-date.  If all tests results are "
+          + "up-to-date, the testing completes successfully.  If any test needs to be built or "
+          + "executed, an error is reported and the testing fails.  This option implies "
+          + "--check_up_to_date behavior."
+          )
+  public boolean testCheckUpToDate;
+
+  @Option(name = "test_strategy",
+      defaultValue = "",
+      category = "testing",
+      help = "Specifies which strategy to use when running tests.")
+  public String testStrategy;
+
+  @Option(name = "test_keep_going",
+      defaultValue = "true",
+      category = "testing",
+      help = "When disabled, any non-passing test will cause the entire build to stop. By default "
+           + "all tests are run, even if some do not pass.")
+  public boolean testKeepGoing;
+
+  @Option(name = "runs_per_test_detects_flakes",
+      defaultValue = "false",
+      category = "testing",
+      help = "If true, any shard in which at least one run/attempt passes and at least one "
+           + "run/attempt fails gets a FLAKY status.")
+  public boolean runsPerTestDetectsFlakes;
+
+  @Option(name = "flaky_test_attempts",
+      defaultValue = "default",
+      category = "testing",
+      converter = TestStrategy.TestAttemptsConverter.class,
+      help = "Each test will be retried up to the specified number of times in case of any test "
+          + "failure. Tests that required more than one attempt to pass would be marked as "
+          + "'FLAKY' in the test summary. If this option is set, it should specify an int N or the "
+          + "string 'default'. If it's an int, then all tests will be run up to N times. If it is "
+          + "not specified or its value is 'default', then only a single test attempt will be made "
+          + "for regular tests and three for tests marked explicitly as flaky by their rule "
+          + "(flaky=1 attribute).")
+  public int testAttempts;
+
+  @Option(name = "test_tmpdir",
+      defaultValue = "null",
+      category = "testing",
+      converter = OptionsUtils.PathFragmentConverter.class,
+      help = "Specifies the base temporary directory for 'blaze test' to use.")
+  public PathFragment testTmpDir;
+
+  @Option(name = "test_output",
+      defaultValue = "summary",
+      category = "testing",
+      converter = TestStrategy.TestOutputFormat.Converter.class,
+      help = "Specifies desired output mode. Valid values are 'summary' to "
+          + "output only test status summary, 'errors' to also print test logs "
+          + "for failed tests, 'all' to print logs for all tests and 'streamed' "
+          + "to output logs for all tests in real time (this will force tests "
+          + "to be executed locally one at a time regardless of --test_strategy "
+          + "value).")
+  public TestOutputFormat testOutput;
+
+  @Option(name = "test_summary",
+      defaultValue = "short",
+      category = "testing",
+      converter = TestStrategy.TestSummaryFormat.Converter.class,
+      help = "Specifies the desired format ot the test summary. Valid values "
+          + "are 'short' to print information only about tests executed, "
+          + "'terse', to print information only about unsuccessful tests,"
+          + "'detailed' to print detailed information about failed test cases, "
+          + "and 'none' to omit the summary.")
+  public TestSummaryFormat testSummary;
+
+  @Option(name = "test_timeout",
+      defaultValue = "-1",
+      category = "testing",
+      converter = TestTimeout.TestTimeoutConverter.class,
+      help = "Override the default test timeout values for test timeouts (in secs). If a single "
+        + "positive integer value is specified it will override all categories.  If 4 comma-"
+        + "separated integers are specified, they will override the timeouts for short, "
+        + "moderate, long and eternal (in that order). In either form, a value of -1 tells blaze "
+        + "to use its default timeouts for that category.")
+  public Map<TestTimeout, Integer> testTimeout;
+
+
+  @Option(name = "resource_autosense",
+      defaultValue = "false",
+      category = "strategy",
+      help = "Periodically (every 3 seconds) poll system CPU load and available memory "
+      + "and allow execution of build commands if system has sufficient idle CPU and "
+      + "free RAM resources. By default this option is disabled, and Blaze will rely on "
+      + "approximation algorithms based on the total amount of available memory and number "
+      + "of CPU cores.")
+  public boolean useResourceAutoSense;
+
+  @Option(name = "ram_utilization_factor",
+      defaultValue = "67",
+      category = "strategy",
+      help = "Specify what percentage of the system's RAM Blaze should try to use for its "
+      + "subprocesses. "
+      + "This option affects how many processes Blaze will try to run in parallel. "
+      + "If you run several Blaze builds in parallel, using a lower value for "
+      + "this option may avoid thrashing and thus improve overall throughput. "
+      + "Using a value higher than the default is NOT recommended. "
+      + "Note that Blaze's estimates are very coarse, so the actual RAM usage may be much "
+      + "higher or much lower than specified. "
+      + "Note also that this option does not affect the amount of memory that the Blaze "
+      + "server itself will use. "
+      + "Also, this option has no effect if --resource_autosense is enabled."
+      )
+  public int ramUtilizationPercentage;
+
+  @Option(name = "local_resources",
+      defaultValue = "null",
+      category = "strategy",
+      help = "Explicitly set amount of local resources available to Blaze. "
+      + "By default, Blaze will query system configuration to estimate amount of RAM (in MB) "
+      + "and number of CPU cores available for the locally executed build actions. It would also "
+      + "assume default I/O capabilities of the local workstation (1.0). This options allows to "
+      + "explicitly set all 3 values. Note, that if this option is used, Blaze will ignore "
+      + "both --ram_utilization_factor and --resource_autosense values.",
+      converter = ResourceSet.ResourceSetConverter.class
+      )
+  public ResourceSet availableResources;
+}