aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Alex Humesky <ahumesky@google.com>2016-01-15 19:21:03 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-01-15 22:29:53 +0000
commitc5ac4308655cbd7eebb70efde3ce1b9450133aec (patch)
tree4f78d35486d45b127a9c1990c4333d9a3991a23d /src/main/java/com/google/devtools/build
parentda1e38736daa2f4187525421308054d4a489ca1a (diff)
Adds support for invocation policy to the canonicalize-flags command.
-- MOS_MIGRATED_REVID=112267123
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/InvocationPolicyEnforcer.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/CanonicalizeCommand.java20
2 files changed, 24 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/InvocationPolicyEnforcer.java b/src/main/java/com/google/devtools/build/lib/runtime/InvocationPolicyEnforcer.java
index de235eb09c..edd367830e 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/InvocationPolicyEnforcer.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/InvocationPolicyEnforcer.java
@@ -70,6 +70,12 @@ public final class InvocationPolicyEnforcer {
return new InvocationPolicyEnforcer(parsePolicy(blazeServerStartupOptions.invocationPolicy));
}
+ public static InvocationPolicyEnforcer create(String invocationPolicy)
+ throws OptionsParsingException {
+
+ return new InvocationPolicyEnforcer(parsePolicy(invocationPolicy));
+ }
+
/**
* Parses the given InvocationPolicy string, which may be a base64-encoded binary-serialized
* InvocationPolicy message, or a text formatted InvocationPolicy message. Note that the
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/CanonicalizeCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/CanonicalizeCommand.java
index 9e1a2c269b..290995e9e2 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/CanonicalizeCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/CanonicalizeCommand.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.runtime.BlazeCommandUtils;
import com.google.devtools.build.lib.runtime.BlazeRuntime;
import com.google.devtools.build.lib.runtime.Command;
import com.google.devtools.build.lib.runtime.CommandEnvironment;
+import com.google.devtools.build.lib.runtime.InvocationPolicyEnforcer;
import com.google.devtools.build.lib.util.ExitCode;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionsBase;
@@ -49,12 +50,17 @@ public final class CanonicalizeCommand implements BlazeCommand {
category = "misc",
help = "The command for which the options should be canonicalized.")
public String forCommand;
+
+ @Option(name = "invocation_policy",
+ defaultValue = "null")
+ public String invocationPolicy;
}
@Override
public ExitCode exec(CommandEnvironment env, OptionsProvider options) {
BlazeRuntime runtime = env.getRuntime();
- String commandName = options.getOptions(Options.class).forCommand;
+ Options canonicalizeOptions = options.getOptions(Options.class);
+ String commandName = canonicalizeOptions.forCommand;
BlazeCommand command = runtime.getCommandMap().get(commandName);
if (command == null) {
env.getReporter().handle(Event.error("Not a valid command: '" + commandName
@@ -65,7 +71,17 @@ public final class CanonicalizeCommand implements BlazeCommand {
BlazeCommandUtils.getOptions(
command.getClass(), runtime.getBlazeModules(), runtime.getRuleClassProvider());
try {
- List<String> result = OptionsParser.canonicalize(optionsClasses, options.getResidue());
+
+ OptionsParser parser = OptionsParser.newOptionsParser(optionsClasses);
+ parser.setAllowResidue(false);
+ parser.parse(options.getResidue());
+
+ InvocationPolicyEnforcer invocationPolicyEnforcer = InvocationPolicyEnforcer.create(
+ canonicalizeOptions.invocationPolicy);
+ invocationPolicyEnforcer.enforce(parser, commandName);
+
+ List<String> result = parser.canonicalize();
+
for (String piece : result) {
env.getReporter().getOutErr().printOutLn(piece);
}