aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java61
1 files changed, 54 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
index 971c003d4a..1427e89799 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
@@ -16,8 +16,12 @@ package com.google.devtools.build.lib.analysis;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsInOutputGroup;
import com.google.devtools.build.lib.buildeventstream.BuildEventId;
import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.File;
+import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.OutputGroup;
import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
import com.google.devtools.build.lib.buildeventstream.PathConverter;
@@ -26,7 +30,9 @@ 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.collect.nestedset.Order;
+import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.rules.test.TestProvider;
+import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.Preconditions;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.Collection;
@@ -37,10 +43,14 @@ public final class TargetCompleteEvent implements SkyValue, BuildEventWithOrderC
private final ConfiguredTarget target;
private final NestedSet<Cause> rootCauses;
private final Collection<BuildEventId> postedAfter;
+ private final Iterable<ArtifactsInOutputGroup> outputs;
private final boolean isTest;
private TargetCompleteEvent(
- ConfiguredTarget target, NestedSet<Cause> rootCauses, boolean isTest) {
+ ConfiguredTarget target,
+ NestedSet<Cause> rootCauses,
+ Iterable<ArtifactsInOutputGroup> outputs,
+ boolean isTest) {
this.target = target;
this.rootCauses =
(rootCauses == null) ? NestedSetBuilder.<Cause>emptySet(Order.STABLE_ORDER) : rootCauses;
@@ -50,17 +60,19 @@ public final class TargetCompleteEvent implements SkyValue, BuildEventWithOrderC
postedAfterBuilder.add(BuildEventId.fromCause(cause));
}
this.postedAfter = postedAfterBuilder.build();
+ this.outputs = outputs;
this.isTest = isTest;
}
/** Construct a successful target completion event. */
- public static TargetCompleteEvent createSuccessfulTarget(ConfiguredTarget ct) {
- return new TargetCompleteEvent(ct, null, false);
+ public static TargetCompleteEvent createSuccessfulTarget(
+ ConfiguredTarget ct, NestedSet<ArtifactsInOutputGroup> outputs) {
+ return new TargetCompleteEvent(ct, null, outputs, false);
}
/** Construct a successful target completion event for a target that will be tested. */
public static TargetCompleteEvent createSuccessfulTestTarget(ConfiguredTarget ct) {
- return new TargetCompleteEvent(ct, null, true);
+ return new TargetCompleteEvent(ct, null, ImmutableList.<ArtifactsInOutputGroup>of(), true);
}
@@ -69,7 +81,8 @@ public final class TargetCompleteEvent implements SkyValue, BuildEventWithOrderC
*/
public static TargetCompleteEvent createFailed(ConfiguredTarget ct, NestedSet<Cause> rootCauses) {
Preconditions.checkArgument(!Iterables.isEmpty(rootCauses));
- return new TargetCompleteEvent(ct, rootCauses, false);
+ return new TargetCompleteEvent(
+ ct, rootCauses, ImmutableList.<ArtifactsInOutputGroup>of(), false);
}
/**
@@ -120,8 +133,14 @@ public final class TargetCompleteEvent implements SkyValue, BuildEventWithOrderC
@Override
public BuildEventStreamProtos.BuildEvent asStreamProto(PathConverter pathConverter) {
- BuildEventStreamProtos.TargetComplete complete =
- BuildEventStreamProtos.TargetComplete.newBuilder().setSuccess(!failed()).build();
+ BuildEventStreamProtos.TargetComplete.Builder builder =
+ BuildEventStreamProtos.TargetComplete.newBuilder();
+
+ builder.setSuccess(!failed());
+ builder.addAllTag(getTags());
+ builder.addAllOutputGroup(getOutputFilesByGroup(pathConverter));
+
+ BuildEventStreamProtos.TargetComplete complete = builder.build();
return GenericBuildEvent.protoChaining(this).setCompleted(complete).build();
}
@@ -129,4 +148,32 @@ public final class TargetCompleteEvent implements SkyValue, BuildEventWithOrderC
public Collection<BuildEventId> postedAfter() {
return postedAfter;
}
+
+ private Iterable<String> getTags() {
+ // We are only interested in targets that are rules.
+ if (!(target instanceof RuleConfiguredTarget)) {
+ return ImmutableList.<String>of();
+ }
+ AttributeMap attributes = ConfiguredAttributeMapper.of((RuleConfiguredTarget) target);
+ // Every rule (implicitly) has a "tags" attribute.
+ return attributes.get("tags", Type.STRING_LIST);
+ }
+
+ private Iterable<OutputGroup> getOutputFilesByGroup(PathConverter pathConverter) {
+ ImmutableList.Builder<OutputGroup> groups = ImmutableList.builder();
+ for (ArtifactsInOutputGroup artifactsInOutputGroup : outputs) {
+ OutputGroup.Builder groupBuilder = OutputGroup.newBuilder();
+ groupBuilder.setName(artifactsInOutputGroup.getOutputGroup());
+
+ File.Builder fileBuilder = File.newBuilder();
+ for (Artifact artifact : artifactsInOutputGroup.getArtifacts()) {
+ String name = artifact.getFilename();
+ String uri = pathConverter.apply(artifact.getPath());
+ groupBuilder.addOutputFile(fileBuilder.setName(name).setUri(uri).build());
+ }
+
+ groups.add(groupBuilder.build());
+ }
+ return groups.build();
+ }
}