use of com.google.devtools.build.lib.actions.ActionAnalysisMetadata in project bazel by bazelbuild.
the class ActionsProvider method create.
/**
* Factory method for creating instances of the Actions provider.
*/
public static SkylarkClassObject create(Iterable<ActionAnalysisMetadata> actions) {
Map<Artifact, ActionAnalysisMetadata> map = new HashMap<>();
for (ActionAnalysisMetadata action : actions) {
for (Artifact artifact : action.getOutputs()) {
// ought to be equal anyway.
if (!map.containsKey(artifact)) {
map.put(artifact, action);
}
}
}
ImmutableMap<String, Object> fields = ImmutableMap.<String, Object>of("by_file", map);
return new SkylarkClassObject(SKYLARK_CONSTRUCTOR, fields);
}
use of com.google.devtools.build.lib.actions.ActionAnalysisMetadata in project bazel by bazelbuild.
the class ActionsTestUtil method artifactClosureOf.
/**
* Returns the closure over the input files of a set of artifacts.
*/
public Set<Artifact> artifactClosureOf(Iterable<Artifact> artifacts) {
Set<Artifact> visited = new LinkedHashSet<>();
List<Artifact> toVisit = Lists.newArrayList(artifacts);
while (!toVisit.isEmpty()) {
Artifact current = toVisit.remove(0);
if (!visited.add(current)) {
continue;
}
ActionAnalysisMetadata generatingAction = actionGraph.getGeneratingAction(current);
if (generatingAction != null) {
Iterables.addAll(toVisit, generatingAction.getInputs());
}
}
return visited;
}
use of com.google.devtools.build.lib.actions.ActionAnalysisMetadata in project bazel by bazelbuild.
the class ActionsTestUtil method getActionForArtifactEndingWith.
/**
* Looks in the given artifacts Iterable for the first Artifact whose path ends with the given
* suffix and returns its generating Action.
*/
public Action getActionForArtifactEndingWith(Iterable<Artifact> artifacts, String suffix) {
Artifact a = getFirstArtifactEndingWith(artifacts, suffix);
if (a == null) {
return null;
}
ActionAnalysisMetadata action = actionGraph.getGeneratingAction(a);
if (action != null) {
Preconditions.checkState(action instanceof Action, "%s is not a proper Action object", action.prettyPrint());
return (Action) action;
} else {
return null;
}
}
use of com.google.devtools.build.lib.actions.ActionAnalysisMetadata in project bazel by bazelbuild.
the class SkylarkRuleContextTest method testCreatedActions.
// For created_actions() tests, the "undertest" rule represents both the code under test and the
// Skylark user test code itself.
@Test
public void testCreatedActions() throws Exception {
// createRuleContext() gives us the context for a rule upon entry into its analysis function.
// But we need to inspect the result of calling created_actions() after the rule context has
// been modified by creating actions. So we'll call created_actions() from within the analysis
// function and pass it along as a provider.
scratch.file("test/rules.bzl", "def _undertest_impl(ctx):", " out1 = ctx.outputs.out1", " out2 = ctx.outputs.out2", " ctx.action(outputs=[out1], command='echo foo123 > ' + out1.path,", " mnemonic='foo')", " v = ctx.created_actions().by_file", " ctx.action(outputs=[out2], command='echo bar123 > ' + out2.path)", " return struct(v=v, out1=out1, out2=out2)", "undertest_rule = rule(", " implementation = _undertest_impl,", " outputs = {'out1': '%{name}1.txt',", " 'out2': '%{name}2.txt'},", " _skylark_testable = True,", ")", testingRuleDefinition);
scratch.file("test/BUILD", simpleBuildDefinition);
SkylarkRuleContext ruleContext = createRuleContext("//test:testing");
Object mapUnchecked = evalRuleContextCode(ruleContext, "ruleContext.attr.dep.v");
assertThat(mapUnchecked).isInstanceOf(SkylarkDict.class);
SkylarkDict<?, ?> map = (SkylarkDict<?, ?>) mapUnchecked;
// Should only have the first action because created_actions() was called
// before the second action was created.
Object file = eval("ruleContext.attr.dep.out1");
assertThat(map).hasSize(1);
assertThat(map).containsKey(file);
Object actionUnchecked = map.get(file);
assertThat(actionUnchecked).isInstanceOf(ActionAnalysisMetadata.class);
assertThat(((ActionAnalysisMetadata) actionUnchecked).getMnemonic()).isEqualTo("foo");
}
Aggregations