diff options
author | janakr <janakr@google.com> | 2017-06-29 20:22:15 +0200 |
---|---|---|
committer | Marcel Hlopko <hlopko@google.com> | 2017-06-30 13:00:25 +0200 |
commit | db54a93c6bd4d571177b13604e9e87028f158f78 (patch) | |
tree | 437d3eacdb8bbfae11cab0c003310e5bbf655448 /src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java | |
parent | 534618c1d3fb65a527f63e5793bf3712a9957d96 (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.java | 38 |
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(); } } |