diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java | 63 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java | 49 |
2 files changed, 67 insertions, 45 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java index ecfff67656..2bd1b4e8f2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkActionFactory.java @@ -13,10 +13,17 @@ // limitations under the License. package com.google.devtools.build.lib.rules; +import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Root; +import com.google.devtools.build.lib.actions.extra.SpawnInfo; +import com.google.devtools.build.lib.analysis.PseudoAction; import com.google.devtools.build.lib.analysis.RuleContext; +import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.skylarkinterface.Param; +import com.google.devtools.build.lib.skylarkinterface.ParamType; import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; @@ -24,7 +31,11 @@ import com.google.devtools.build.lib.skylarkinterface.SkylarkValue; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.Printer; import com.google.devtools.build.lib.syntax.Runtime; +import com.google.devtools.build.lib.syntax.SkylarkList; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import com.google.devtools.build.lib.vfs.PathFragment; +import java.nio.charset.StandardCharsets; +import java.util.UUID; /** * Provides a Skylark interface for all action creation needs. @@ -132,7 +143,57 @@ public class SkylarkActionFactory implements SkylarkValue { } - @Override + @SkylarkCallable( + name = "do_nothing", + doc = + "Creates an empty action that neither executes a command nor produces any " + + "output, but that is useful for inserting 'extra actions'.", + parameters = { + @Param( + name = "mnemonic", + type = String.class, + named = true, + positional = false, + doc = "a one-word description of the action, e.g. CppCompile or GoLink." + ), + @Param( + name = "inputs", + allowedTypes = { + @ParamType(type = SkylarkList.class), + @ParamType(type = SkylarkNestedSet.class), + }, + generic1 = Artifact.class, + named = true, + positional = false, + defaultValue = "[]", + doc = "list of the input files of the action." + ), + } + ) + public void doNothing(String mnemonic, Object inputs) throws EvalException { + context.checkMutable("actions.do_nothing"); + NestedSet<Artifact> inputSet = inputs instanceof SkylarkNestedSet + ? ((SkylarkNestedSet) inputs).getSet(Artifact.class) + : NestedSetBuilder.<Artifact>compileOrder() + .addAll(((SkylarkList) inputs).getContents(Artifact.class, "inputs")) + .build(); + Action action = + new PseudoAction<>( + UUID.nameUUIDFromBytes( + String.format("empty action %s", ruleContext.getLabel()) + .getBytes(StandardCharsets.UTF_8)), + ruleContext.getActionOwner(), + inputSet, + ImmutableList.of(PseudoAction.getDummyOutput(ruleContext)), + mnemonic, + SpawnInfo.spawnInfo, + SpawnInfo.newBuilder().build()); + ruleContext.registerAction(action); + } + + + + @Override public boolean isImmutable() { return context.isImmutable(); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java index 5908834a0f..9488165e06 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java @@ -16,17 +16,13 @@ package com.google.devtools.build.lib.rules; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.RunfilesSupplier; -import com.google.devtools.build.lib.actions.extra.SpawnInfo; import com.google.devtools.build.lib.analysis.AbstractConfiguredTarget; import com.google.devtools.build.lib.analysis.CommandHelper; import com.google.devtools.build.lib.analysis.FileProvider; import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.LocationExpander; -import com.google.devtools.build.lib.analysis.PseudoAction; -import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.Runfiles; import com.google.devtools.build.lib.analysis.RunfilesProvider; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; @@ -35,8 +31,6 @@ import com.google.devtools.build.lib.analysis.actions.SpawnAction; import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction; import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Substitution; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.collect.nestedset.NestedSet; -import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.events.Location; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.ParamType; @@ -62,7 +56,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.UUID; // TODO(bazel-team): function argument names are often duplicated, // figure out a nicely readable way to get rid of the duplications. @@ -444,7 +437,9 @@ public class SkylarkRuleImplementationFunctions { @SkylarkSignature( name = "empty_action", doc = - "Creates an empty action that neither executes a command nor produces any " + "DEPRECATED. Use <a href=\"actions.html#do_nothing\">ctx.actions.do_nothing</a> instead." + + " <br>" + + "Creates an empty action that neither executes a command nor produces any " + "output, but that is useful for inserting 'extra actions'.", objectType = SkylarkRuleContext.class, returnType = Runtime.NoneType.class, @@ -475,45 +470,11 @@ public class SkylarkRuleImplementationFunctions { new BuiltinFunction("empty_action") { @SuppressWarnings("unused") public Runtime.NoneType invoke(SkylarkRuleContext ctx, String mnemonic, Object inputs) - throws EvalException, ConversionException { + throws EvalException { ctx.checkMutable("empty_action"); - RuleContext ruleContext = ctx.getRuleContext(); - NestedSet<Artifact> inputSet = inputs instanceof SkylarkNestedSet - ? ((SkylarkNestedSet) inputs).getSet(Artifact.class) - : convertInputs((SkylarkList) inputs); - Action action = - new PseudoAction<>( - generateUuid(ruleContext), - ruleContext.getActionOwner(), - inputSet, - generateDummyOutputs(ruleContext), - mnemonic, - SpawnInfo.spawnInfo, - createEmptySpawnInfo()); - ruleContext.registerAction(action); - + ctx.actions().doNothing(mnemonic, inputs); return Runtime.NONE; } - - private NestedSet<Artifact> convertInputs(SkylarkList inputs) throws EvalException { - return NestedSetBuilder.<Artifact>compileOrder() - .addAll(inputs.getContents(Artifact.class, "inputs")) - .build(); - } - - protected UUID generateUuid(RuleContext ruleContext) { - return UUID.nameUUIDFromBytes( - String.format("empty action %s", ruleContext.getLabel()) - .getBytes(StandardCharsets.UTF_8)); - } - - protected ImmutableList<Artifact> generateDummyOutputs(RuleContext ruleContext) { - return ImmutableList.of(PseudoAction.getDummyOutput(ruleContext)); - } - - protected SpawnInfo createEmptySpawnInfo() { - return SpawnInfo.newBuilder().build(); - } }; @SkylarkSignature( |