From 2f232c8078d241f61947878d4a67989e3c8884e8 Mon Sep 17 00:00:00 2001 From: twerth Date: Wed, 7 Mar 2018 05:57:37 -0800 Subject: Add option to dump command lines of actions in dump. RELNOTES: None PiperOrigin-RevId: 188164754 --- .../build/lib/runtime/commands/DumpCommand.java | 26 +++++++++++++++++++--- .../lib/skyframe/SequencedSkyframeExecutor.java | 7 ++++-- .../build/lib/skyframe/SkyframeExecutor.java | 5 ++++- .../lib/skyframe/actiongraph/ActionGraphDump.java | 19 ++++++++++++---- 4 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java index 2400cf6d18..a9fba24573 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.runtime.commands; import static java.util.stream.Collectors.toList; +import com.google.devtools.build.lib.actions.CommandLineExpansionException; import com.google.devtools.build.lib.analysis.AnalysisProtos.ActionGraphContainer; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.ExtendedEventHandler; @@ -127,6 +128,18 @@ public class DumpCommand implements BlazeCommand { ) public List actionGraphTargets; + @Option( + name = "action_graph:include_cmdline", + defaultValue = "false", + category = "verbosity", + documentationCategory = OptionDocumentationCategory.OUTPUT_SELECTION, + effectTags = {OptionEffectTag.BAZEL_MONITORING}, + help = + "Include command line of actions in the action graph dump. " + + "This option does only apply to --action_graph." + ) + public boolean actionGraphIncludeCmdLine; + @Option( name = "rule_classes", defaultValue = "false", @@ -251,7 +264,10 @@ public class DumpCommand implements BlazeCommand { env.getSkyframeExecutor(), dumpOptions.dumpActionGraph, dumpOptions.actionGraphTargets, + dumpOptions.actionGraphIncludeCmdLine, out); + } catch (CommandLineExpansionException e) { + env.getReporter().handle(Event.error(null, "Error expanding command line: " + e)); } catch (IOException e) { env.getReporter() .error( @@ -303,11 +319,15 @@ public class DumpCommand implements BlazeCommand { } private boolean dumpActionGraph( - SkyframeExecutor executor, String path, List actionGraphTargets, PrintStream out) - throws IOException { + SkyframeExecutor executor, + String path, + List actionGraphTargets, + boolean includeActionCmdLine, + PrintStream out) + throws CommandLineExpansionException, IOException { out.println("Dumping action graph to '" + path + "'"); ActionGraphContainer actionGraphContainer = - executor.getActionGraphContainer(actionGraphTargets); + executor.getActionGraphContainer(actionGraphTargets, includeActionCmdLine); FileOutputStream protoOutputStream = new FileOutputStream(path); actionGraphContainer.writeTo(protoOutputStream); protoOutputStream.close(); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java index e6375c0e02..6844818b7c 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java @@ -28,6 +28,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Range; import com.google.common.collect.Sets; import com.google.devtools.build.lib.actions.ActionKeyContext; +import com.google.devtools.build.lib.actions.CommandLineExpansionException; import com.google.devtools.build.lib.analysis.AnalysisProtos.ActionGraphContainer; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.BuildView; @@ -763,8 +764,10 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { } @Override - public ActionGraphContainer getActionGraphContainer(List actionGraphTargets) { - ActionGraphDump actionGraphDump = new ActionGraphDump(actionGraphTargets); + public ActionGraphContainer getActionGraphContainer( + List actionGraphTargets, boolean includeActionCmdLine) + throws CommandLineExpansionException { + ActionGraphDump actionGraphDump = new ActionGraphDump(actionGraphTargets, includeActionCmdLine); for (Map.Entry skyKeyAndNodeEntry : memoizingEvaluator.getGraphMap().entrySet()) { NodeEntry entry = skyKeyAndNodeEntry.getValue(); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 4a8bf8ed80..41106fca89 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -50,6 +50,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ArtifactFactory; import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.ArtifactRoot; +import com.google.devtools.build.lib.actions.CommandLineExpansionException; import com.google.devtools.build.lib.actions.EnvironmentalExecException; import com.google.devtools.build.lib.actions.Executor; import com.google.devtools.build.lib.actions.FileStateType; @@ -593,7 +594,9 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { } } - public abstract ActionGraphContainer getActionGraphContainer(List actionGraphTargets); + public abstract ActionGraphContainer getActionGraphContainer( + List actionGraphTargets, boolean includeActionCmdLine) + throws CommandLineExpansionException; class BuildViewProvider { /** diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/ActionGraphDump.java b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/ActionGraphDump.java index a606e34553..3a18d414c4 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/ActionGraphDump.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/ActionGraphDump.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionMetadata; import com.google.devtools.build.lib.actions.ActionKeyContext; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.CommandLineExpansionException; import com.google.devtools.build.lib.analysis.AnalysisProtos; import com.google.devtools.build.lib.analysis.AnalysisProtos.ActionGraphContainer; import com.google.devtools.build.lib.analysis.ConfiguredTarget; @@ -56,9 +57,12 @@ public class ActionGraphDump { private final KnownNestedSets knownNestedSets; private final KnownAspectDescriptors knownAspectDescriptors; private final KnownRuleConfiguredTargets knownRuleConfiguredTargets; + private final boolean includeActionCmdLine; - public ActionGraphDump(List actionGraphTargets) { + public ActionGraphDump(List actionGraphTargets, boolean includeActionCmdLine) { this.actionGraphTargets = ImmutableSet.copyOf(actionGraphTargets); + this.includeActionCmdLine = includeActionCmdLine; + knownRuleClassStrings = new KnownRuleClassStrings(actionGraphBuilder); knownArtifacts = new KnownArtifacts(actionGraphBuilder); knownConfigurations = new KnownConfigurations(actionGraphBuilder); @@ -80,7 +84,8 @@ public class ActionGraphDump { return actionGraphTargets.contains(labelString); } - private void dumpSingleAction(ConfiguredTarget configuredTarget, ActionAnalysisMetadata action) { + private void dumpSingleAction(ConfiguredTarget configuredTarget, ActionAnalysisMetadata action) + throws CommandLineExpansionException { Preconditions.checkState(configuredTarget instanceof RuleConfiguredTarget); RuleConfiguredTarget ruleConfiguredTarget = (RuleConfiguredTarget) configuredTarget; AnalysisProtos.Action.Builder actionBuilder = @@ -109,6 +114,10 @@ public class ActionGraphDump { .setValue(environmentVariable.getValue()); actionBuilder.addEnvironmentVariables(keyValuePairBuilder.build()); } + + if (includeActionCmdLine) { + actionBuilder.addAllArguments(spawnAction.getArguments()); + } } ActionOwner actionOwner = action.getOwner(); @@ -140,7 +149,8 @@ public class ActionGraphDump { actionGraphBuilder.addActions(actionBuilder.build()); } - public void dumpAspect(AspectValue aspectValue, ConfiguredTargetValue configuredTargetValue) { + public void dumpAspect(AspectValue aspectValue, ConfiguredTargetValue configuredTargetValue) + throws CommandLineExpansionException { ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget(); if (!includeInActionGraph(configuredTarget.getLabel().toString())) { return; @@ -151,7 +161,8 @@ public class ActionGraphDump { } } - public void dumpConfiguredTarget(ConfiguredTargetValue configuredTargetValue) { + public void dumpConfiguredTarget(ConfiguredTargetValue configuredTargetValue) + throws CommandLineExpansionException { ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget(); if (!includeInActionGraph(configuredTarget.getLabel().toString())) { return; -- cgit v1.2.3