aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/dash/DashModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandUtils.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java31
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/ssd/SsdModule.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java2
10 files changed, 46 insertions, 15 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
index dece6e0cf0..4704497d4f 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
@@ -270,7 +270,7 @@ public class BazelWorkspaceStatusModule extends BlazeModule {
@Override
public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) {
- return command.builds()
+ return "build".equals(command.name())
? ImmutableList.<Class<? extends OptionsBase>>of(WorkspaceStatusAction.Options.class)
: ImmutableList.<Class<? extends OptionsBase>>of();
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/dash/DashModule.java b/src/main/java/com/google/devtools/build/lib/bazel/dash/DashModule.java
index 79c753f7d3..192dc60b40 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/dash/DashModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/dash/DashModule.java
@@ -106,7 +106,7 @@ public class DashModule extends BlazeModule {
@Override
public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) {
- return (command.name().equals("build") || command.name().equals("test"))
+ return "build".equals(command.name())
? ImmutableList.<Class<? extends OptionsBase>>of(DashOptions.class)
: ImmutableList.<Class<? extends OptionsBase>>of();
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
index a0c142e096..0e6b8accc2 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRulesModule.java
@@ -153,7 +153,7 @@ public class BazelRulesModule extends BlazeModule {
@Override
public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) {
- return command.builds()
+ return "build".equals(command.name())
? ImmutableList.<Class<? extends OptionsBase>>of(BazelExecutionOptions.class)
: ImmutableList.<Class<? extends OptionsBase>>of();
}
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
index 88e7f86e58..ff772217b4 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
@@ -88,7 +88,7 @@ public final class RemoteModule extends BlazeModule {
@Override
public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) {
- return command.builds()
+ return "build".equals(command.name())
? ImmutableList.<Class<? extends OptionsBase>>of(RemoteOptions.class)
: ImmutableList.<Class<? extends OptionsBase>>of();
}
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandUtils.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandUtils.java
index 722baea810..8e42ad8f41 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeCommandUtils.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.runtime;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.util.ResourceFileLoader;
@@ -59,8 +60,14 @@ public class BlazeCommandUtils {
return ImmutableList.copyOf(options);
}
- public static ImmutableList<Class<? extends OptionsBase>> getCommonOptions() {
- return COMMON_COMMAND_OPTIONS;
+ public static ImmutableSet<Class<? extends OptionsBase>> getCommonOptions(
+ Iterable<BlazeModule> modules) {
+ ImmutableSet.Builder<Class<? extends OptionsBase>> builder = ImmutableSet.builder();
+ builder.addAll(COMMON_COMMAND_OPTIONS);
+ for (BlazeModule blazeModule : modules) {
+ builder.addAll(blazeModule.getCommonCommandOptions());
+ }
+ return builder.build();
}
/**
@@ -80,7 +87,7 @@ public class BlazeCommandUtils {
}
Set<Class<? extends OptionsBase>> options = new HashSet<>();
- options.addAll(COMMON_COMMAND_OPTIONS);
+ options.addAll(getCommonOptions(modules));
Collections.addAll(options, commandAnnotation.options());
if (commandAnnotation.usesConfigurationOptions()) {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
index b6e5d45637..79d0c935c8 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BlazeModule.java
@@ -245,16 +245,41 @@ public abstract class BlazeModule {
}
/**
- * Returns the extra options this module contributes to a specific command.
+ * Returns extra options this module contributes to a specific command. Note that option
+ * inheritance applies: if this method returns a non-empty list, then the returned options are
+ * added to every command that depends on this command.
*
- * <p>This method will be called at the beginning of each command (after #beforeCommand).
+ * <p>This method may be called at any time, and the returned value may be cached. Implementations
+ * must be thread-safe and never return different lists for the same command object. Typical
+ * implementations look like this:
+ * <pre>
+ * return "build".equals(command.name())
+ * ? ImmutableList.<Class<? extends OptionsBase>>of(MyOptions.class)
+ * : ImmutableList.<Class<? extends OptionsBase>>of();
+ * </pre>
+ * Note that this example adds options to all commands that inherit from the build command.
+ *
+ * <p>This method is also used to generate command-line documentation; in order to avoid
+ * duplicated options descriptions, this method should never return the same options class for two
+ * different commands if one of them inherits the other.
+ *
+ * <p>If you want to add options to all commands, override {@link #getCommonCommandOptions}
+ * instead.
+ *
+ * @param command the command
*/
- @SuppressWarnings("unused")
public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) {
return ImmutableList.of();
}
/**
+ * Returns extra options this module contributes to all commands.
+ */
+ public Iterable<Class<? extends OptionsBase>> getCommonCommandOptions() {
+ return ImmutableList.of();
+ }
+
+ /**
* Returns a map of option categories to descriptive strings. This is used by {@code HelpCommand}
* to show a more readable list of flags.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java
index ba199923a1..79875d8b7e 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/HelpCommand.java
@@ -355,7 +355,7 @@ public final class HelpCommand implements BlazeCommand {
result.append("\n");
result.append("<h2><a name=\"common_options\">Options Common to all Commands</a></h2>\n");
- appendOptionsHtml(result, BlazeCommandUtils.getCommonOptions());
+ appendOptionsHtml(result, BlazeCommandUtils.getCommonOptions(runtime.getBlazeModules()));
result.append("\n");
for (Map.Entry<String, BlazeCommand> e : commandsByName.entrySet()) {
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
index 7187937a74..04f6169715 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxModule.java
@@ -85,7 +85,7 @@ public class SandboxModule extends BlazeModule {
@Override
public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) {
- return command.builds()
+ return "build".equals(command.name())
? ImmutableList.<Class<? extends OptionsBase>>of(SandboxOptions.class)
: ImmutableList.<Class<? extends OptionsBase>>of();
}
diff --git a/src/main/java/com/google/devtools/build/lib/ssd/SsdModule.java b/src/main/java/com/google/devtools/build/lib/ssd/SsdModule.java
index a41a3baa38..00b5ad370c 100644
--- a/src/main/java/com/google/devtools/build/lib/ssd/SsdModule.java
+++ b/src/main/java/com/google/devtools/build/lib/ssd/SsdModule.java
@@ -16,7 +16,6 @@ package com.google.devtools.build.lib.ssd;
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.cache.DigestUtils;
import com.google.devtools.build.lib.runtime.BlazeModule;
-import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.common.options.OptionsBase;
import com.google.devtools.common.options.OptionsProvider;
@@ -26,7 +25,7 @@ import com.google.devtools.common.options.OptionsProvider;
*/
public final class SsdModule extends BlazeModule {
@Override
- public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) {
+ public Iterable<Class<? extends OptionsBase>> getCommonCommandOptions() {
return ImmutableList.<Class<? extends OptionsBase>>of(SsdOptions.class);
}
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java
index 63bade2086..b69879778f 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerModule.java
@@ -45,7 +45,7 @@ public class WorkerModule extends BlazeModule {
@Override
public Iterable<Class<? extends OptionsBase>> getCommandOptions(Command command) {
- return command.builds()
+ return "build".equals(command.name())
? ImmutableList.<Class<? extends OptionsBase>>of(WorkerOptions.class)
: ImmutableList.<Class<? extends OptionsBase>>of();
}