aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2017-06-29 20:22:15 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-06-30 13:00:25 +0200
commitdb54a93c6bd4d571177b13604e9e87028f158f78 (patch)
tree437d3eacdb8bbfae11cab0c003310e5bbf655448 /src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
parent534618c1d3fb65a527f63e5793bf3712a9957d96 (diff)
Add a #getBytes() method to DeterministicWriter that returns a ByteString. By default it just delegates to the existing #writeOutputFile, but implementations may choose to override if they have easy access to a ByteString.
Also change some DeterministicWriter implementations that do have easy access to the ByteString. PiperOrigin-RevId: 160550028
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java38
1 files changed, 19 insertions, 19 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
index fbd0943744..d967df0956 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -30,6 +30,7 @@ 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.actions.AbstractFileWriteAction;
+import com.google.devtools.build.lib.analysis.actions.ByteStringDeterministicWriter;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
@@ -80,9 +81,8 @@ import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.ValueOrException;
import com.google.devtools.common.options.OptionsParser;
import com.google.devtools.common.options.OptionsParsingException;
-import java.io.ByteArrayOutputStream;
+import com.google.protobuf.ByteString;
import java.io.IOException;
-import java.io.OutputStream;
import java.nio.channels.ClosedByInterruptException;
import java.util.Collection;
import java.util.HashSet;
@@ -146,7 +146,7 @@ public class GenQuery implements RuleConfiguredTargetFactory {
// force relative_locations to true so it has a deterministic output across machines.
queryOptions.relativeLocations = true;
- final byte[] result = executeQuery(ruleContext, queryOptions, getScope(ruleContext), query);
+ ByteString result = executeQuery(ruleContext, queryOptions, getScope(ruleContext), query);
if (result == null || ruleContext.hasErrors()) {
return null;
}
@@ -252,8 +252,9 @@ public class GenQuery implements RuleConfiguredTargetFactory {
}
@Nullable
- private byte[] executeQuery(RuleContext ruleContext, QueryOptions queryOptions,
- Set<Target> scope, String query) throws InterruptedException {
+ private ByteString executeQuery(
+ RuleContext ruleContext, QueryOptions queryOptions, Set<Target> scope, String query)
+ throws InterruptedException {
SkyFunction.Environment env = ruleContext.getAnalysisEnvironment().getSkyframeEnv();
Pair<ImmutableMap<PackageIdentifier, Package>, ImmutableMap<Label, Target>> closureInfo;
try {
@@ -277,9 +278,13 @@ public class GenQuery implements RuleConfiguredTargetFactory {
@SuppressWarnings("unchecked")
@Nullable
- private byte[] doQuery(QueryOptions queryOptions, PackageProvider packageProvider,
- Predicate<Label> labelFilter, TargetPatternEvaluator evaluator,
- String query, RuleContext ruleContext)
+ private ByteString doQuery(
+ QueryOptions queryOptions,
+ PackageProvider packageProvider,
+ Predicate<Label> labelFilter,
+ TargetPatternEvaluator evaluator,
+ String query,
+ RuleContext ruleContext)
throws InterruptedException {
DigraphQueryEvalResult<Target> queryResult;
@@ -339,7 +344,7 @@ public class GenQuery implements RuleConfiguredTargetFactory {
throw new RuntimeException(e);
}
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ ByteString.Output outputStream = ByteString.newOutput();
try {
QueryOutputUtils
.output(queryOptions, queryResult, targets.getResult(), formatter, outputStream,
@@ -350,32 +355,27 @@ public class GenQuery implements RuleConfiguredTargetFactory {
throw new RuntimeException(e);
}
- return outputStream.toByteArray();
+ return outputStream.toByteString();
}
@Immutable // assuming no other reference to result
private static final class QueryResultAction extends AbstractFileWriteAction {
- private final byte[] result;
+ private final ByteString result;
- private QueryResultAction(ActionOwner owner, Artifact output, byte[] result) {
+ private QueryResultAction(ActionOwner owner, Artifact output, ByteString result) {
super(owner, ImmutableList.<Artifact>of(), output, /*makeExecutable=*/false);
this.result = result;
}
@Override
public DeterministicWriter newDeterministicWriter(ActionExecutionContext ctx) {
- return new DeterministicWriter() {
- @Override
- public void writeOutputFile(OutputStream out) throws IOException {
- out.write(result);
- }
- };
+ return new ByteStringDeterministicWriter(result);
}
@Override
protected String computeKey() {
Fingerprint f = new Fingerprint();
- f.addBytes(result);
+ f.addBytes(result.toByteArray());
return f.hexDigestAndReset();
}
}