aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/Action.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionResult.java55
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/FailAction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/MiddlemanAction.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/AbstractFileWriteAction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java11
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkTreeAction.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java12
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/ExtractInclusionAction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java3
23 files changed, 162 insertions, 64 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Action.java b/src/main/java/com/google/devtools/build/lib/actions/Action.java
index 9faddfea0c..e87d79edcf 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Action.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Action.java
@@ -89,32 +89,31 @@ public interface Action extends ActionExecutionMetadata, Describable {
void prepare(Path execRoot) throws IOException;
/**
- * Executes this action; called by the Builder when all of this Action's
- * inputs have been successfully created. (Behaviour is undefined if the
- * prerequisites are not up to date.) This method <i>actually does the work
- * of the Action, unconditionally</i>; in other words, it is invoked by the
- * Builder only when dependency analysis has deemed it necessary.</p>
+ * Executes this action; called by the Builder when all of this Action's inputs have been
+ * successfully created. (Behaviour is undefined if the prerequisites are not up to date.) This
+ * method <i>actually does the work of the Action, unconditionally</i>; in other words, it is
+ * invoked by the Builder only when dependency analysis has deemed it necessary.
*
- * <p>The framework guarantees that the output directory for each file in
- * <code>getOutputs()</code> has already been created, and will check to
- * ensure that each of those files is indeed created.</p>
+ * <p>The framework guarantees that the output directory for each file in <code>getOutputs()
+ * </code> has already been created, and will check to ensure that each of those files is indeed
+ * created.
*
- * <p>Implementations of this method should try to honour the {@link
- * java.lang.Thread#interrupted} contract: if an interrupt is delivered to
- * the thread in which execution occurs, the action should detect this on a
- * best-effort basis and terminate as quickly as possible by throwing an
+ * <p>Implementations of this method should try to honour the {@link java.lang.Thread#interrupted}
+ * contract: if an interrupt is delivered to the thread in which execution occurs, the action
+ * should detect this on a best-effort basis and terminate as quickly as possible by throwing an
* ActionExecutionException.
*
- * <p>Action execution must be ThreadCompatible in order to be safely used
- * with a concurrent Builder implementation such as ParallelBuilder.
+ * <p>Action execution must be ThreadCompatible in order to be safely used with a concurrent
+ * Builder implementation such as ParallelBuilder.
*
- * @param actionExecutionContext Services in the scope of the action, like the output and error
- * streams to use for messages arising during action execution.
- * @throws ActionExecutionException if execution fails for any reason.
+ * @param actionExecutionContext services in the scope of the action, like the output and error
+ * streams to use for messages arising during action execution
+ * @return returns an ActionResult containing action execution metadata
+ * @throws ActionExecutionException if execution fails for any reason
* @throws InterruptedException
*/
@ConditionallyThreadCompatible
- void execute(ActionExecutionContext actionExecutionContext)
+ ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException;
/**
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionResult.java b/src/main/java/com/google/devtools/build/lib/actions/ActionResult.java
new file mode 100644
index 0000000000..3ae8e02f92
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionResult.java
@@ -0,0 +1,55 @@
+// Copyright 2017 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.actions;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableSet;
+import java.util.Set;
+
+/** Holds the result(s) of an action's execution. */
+@AutoValue
+public abstract class ActionResult {
+
+ /** An empty ActionResult used by Actions that don't have any metadata to return. */
+ public static final ActionResult EMPTY = ActionResult.create(ImmutableSet.of());
+
+ /** Returns the SpawnResults for the action. */
+ public abstract Set<SpawnResult> spawnResults();
+
+ /** Returns a builder that can be used to construct a {@link ActionResult} object. */
+ public static Builder builder() {
+ return new AutoValue_ActionResult.Builder();
+ }
+
+ /** Creates an ActionResult given a set of SpawnResults. */
+ public static ActionResult create(Set<SpawnResult> spawnResults) {
+ if (spawnResults == null) {
+ return EMPTY;
+ } else {
+ return builder().setSpawnResults(spawnResults).build();
+ }
+ }
+
+ /** Builder for a {@link ActionResult} instance, which is immutable once built. */
+ @AutoValue.Builder
+ public abstract static class Builder {
+
+ /** Sets the SpawnResults for the action. */
+ public abstract Builder setSpawnResults(Set<SpawnResult> spawnResults);
+
+ /** Builds and returns an ActionResult object. */
+ public abstract ActionResult build();
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FailAction.java b/src/main/java/com/google/devtools/build/lib/actions/FailAction.java
index 8bebf4eb99..7f217409c8 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FailAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FailAction.java
@@ -39,7 +39,7 @@ public final class FailAction extends AbstractAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException {
throw new ActionExecutionException(errorMessage, this, false);
}
diff --git a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanAction.java b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanAction.java
index 7474c7c13d..6713032058 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/MiddlemanAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/MiddlemanAction.java
@@ -51,8 +51,7 @@ public final class MiddlemanAction extends AbstractAction {
}
@Override
- public final void execute(
- ActionExecutionContext actionExecutionContext) {
+ public final ActionResult execute(ActionExecutionContext actionExecutionContext) {
throw new IllegalStateException("MiddlemanAction should never be executed");
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java b/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java
index d37770fd77..4c85dc0ada 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/PseudoAction.java
@@ -18,6 +18,7 @@ import com.google.devtools.build.lib.actions.AbstractAction;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.actions.extra.ExtraActionInfo;
@@ -50,7 +51,7 @@ public class PseudoAction<InfoType extends MessageLite> extends AbstractAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException {
throw new ActionExecutionException(
mnemonic + "ExtraAction should not be executed.", this, false);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/AbstractFileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/AbstractFileWriteAction.java
index 53a03d6308..3789e986b4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/AbstractFileWriteAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/AbstractFileWriteAction.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.AbstractAction;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.cmdline.Label;
@@ -55,10 +56,13 @@ public abstract class AbstractFileWriteAction extends AbstractAction {
}
@Override
- public final void execute(ActionExecutionContext actionExecutionContext)
+ public final ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
+ ActionResult actionResult;
try {
- getStrategy(actionExecutionContext).exec(this, actionExecutionContext);
+ actionResult =
+ ActionResult.create(
+ getStrategy(actionExecutionContext).exec(this, actionExecutionContext));
} catch (ExecException e) {
throw e.toActionExecutionException(
"Writing file for rule '" + Label.print(getOwner().getLabel()) + "'",
@@ -66,6 +70,7 @@ public abstract class AbstractFileWriteAction extends AbstractAction {
this);
}
afterWrite(actionExecutionContext);
+ return actionResult;
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java
index 4cdf2f1e12..74131b1295 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/ExecutableSymlinkAction.java
@@ -18,6 +18,7 @@ import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.vfs.Path;
import java.io.IOException;
@@ -33,7 +34,7 @@ public final class ExecutableSymlinkAction extends SymlinkAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException {
Path inputPath = getPrimaryInput().getPath();
try {
@@ -56,7 +57,7 @@ public final class ExecutableSymlinkAction extends SymlinkAction {
+ "' due to I/O error: " + e.getMessage(), e, this, false);
}
- super.execute(actionExecutionContext);
+ return super.execute(actionExecutionContext);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java
index 8efe29ffef..7f64be3f40 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/PopulateTreeArtifactAction.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionMetadata;
import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.ActionInputHelper;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Actions;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact;
@@ -34,6 +35,7 @@ import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.actions.RunfilesSupplier;
import com.google.devtools.build.lib.actions.Spawn;
import com.google.devtools.build.lib.actions.SpawnActionContext;
+import com.google.devtools.build.lib.actions.SpawnResult;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.Preconditions;
@@ -43,6 +45,7 @@ import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Set;
/**
* An action that populates a TreeArtifact with the contents of an archive file.
@@ -151,7 +154,7 @@ public final class PopulateTreeArtifactAction extends AbstractAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
Spawn spawn;
@@ -167,7 +170,7 @@ public final class PopulateTreeArtifactAction extends AbstractAction {
// If the spawn does not have any output, it means the archive file contains nothing. In this
// case we just return without generating anything under the output TreeArtifact.
if (spawn.getOutputFiles().isEmpty()) {
- return;
+ return ActionResult.EMPTY;
}
// Check spawn output TreeFileArtifact conflicts.
@@ -188,8 +191,9 @@ public final class PopulateTreeArtifactAction extends AbstractAction {
}
// Execute the spawn.
+ Set<SpawnResult> spawnResults;
try {
- getContext(actionExecutionContext).exec(spawn, actionExecutionContext);
+ spawnResults = getContext(actionExecutionContext).exec(spawn, actionExecutionContext);
} catch (ExecException e) {
throw e.toActionExecutionException(
getMnemonic() + " action failed for target: " + getOwner().getLabel(),
@@ -202,6 +206,7 @@ public final class PopulateTreeArtifactAction extends AbstractAction {
actionExecutionContext.getMetadataHandler().addExpandedTreeOutput(
(TreeFileArtifact) fileEntry);
}
+ return ActionResult.create(spawnResults);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index 688d2aaa94..cd19919d47 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -28,6 +28,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.ActionInputHelper;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
import com.google.devtools.build.lib.actions.BaseSpawn;
@@ -262,11 +263,10 @@ public class SpawnAction extends AbstractAction implements ExecutionInfoSpecifie
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
try {
- // TODO(b/62588075): internalExecute() now returns a set of SpawnResults, we could capture it.
- internalExecute(actionExecutionContext);
+ return ActionResult.create(internalExecute(actionExecutionContext));
} catch (ExecException e) {
String failMessage;
if (isShellCommand()) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java
index df3b56f829..e9bbdf7e19 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkAction.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.AbstractAction;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.util.Preconditions;
@@ -107,7 +108,7 @@ public class SymlinkAction extends AbstractAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException {
Path srcPath;
if (inputPath == null) {
@@ -123,6 +124,7 @@ public class SymlinkAction extends AbstractAction {
+ "' to the '" + Iterables.getOnlyElement(getInputs()).prettyPrint()
+ "' due to I/O error: " + e.getMessage(), e, this, false);
}
+ return ActionResult.EMPTY;
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkTreeAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkTreeAction.java
index 25da294619..d510c28e86 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkTreeAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SymlinkTreeAction.java
@@ -19,6 +19,7 @@ import com.google.devtools.build.lib.actions.AbstractAction;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.util.Fingerprint;
@@ -113,10 +114,11 @@ public final class SymlinkTreeAction extends AbstractAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
- actionExecutionContext
- .getContext(SymlinkTreeActionContext.class)
- .createSymlinks(this, actionExecutionContext, shellEnvironment, enableRunfiles);
+ return ActionResult.create(
+ actionExecutionContext
+ .getContext(SymlinkTreeActionContext.class)
+ .createSymlinks(this, actionExecutionContext, shellEnvironment, enableRunfiles));
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java
index 8c4d14aa79..39b9f4c5bd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/extra/ExtraAction.java
@@ -24,6 +24,7 @@ import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.ActionEnvironment;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.CompositeRunfilesSupplier;
import com.google.devtools.build.lib.actions.RunfilesSupplier;
@@ -147,17 +148,16 @@ public final class ExtraAction extends SpawnAction {
/**
* @InheritDoc
*
- * This method calls in to {@link AbstractAction#getInputFilesForExtraAction} and
- * {@link Action#getExtraActionInfo} of the action being shadowed from the thread executing this
+ * <p>This method calls in to {@link AbstractAction#getInputFilesForExtraAction} and {@link
+ * Action#getExtraActionInfo} of the action being shadowed from the thread executing this
* ExtraAction. It assumes these methods are safe to call from a different thread than the thread
* responsible for the execution of the action being shadowed.
*/
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
// PHASE 2: execution of extra_action.
-
- super.execute(actionExecutionContext);
+ ActionResult actionResult = super.execute(actionExecutionContext);
// PHASE 3: create dummy output.
// If the user didn't specify output, we need to create dummy output
@@ -171,6 +171,8 @@ public final class ExtraAction extends SpawnAction {
}
}
}
+
+ return actionResult;
}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
index 49a56222e7..a3525e5501 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestRunnerAction.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.ActionInputHelper;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.actions.ExecException;
@@ -656,11 +657,11 @@ public class TestRunnerAction extends AbstractAction implements NotifyOnActionCa
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
TestActionContext context = actionExecutionContext.getContext(TestActionContext.class);
try {
- context.exec(this, actionExecutionContext);
+ return ActionResult.create(context.exec(this, actionExecutionContext));
} catch (ExecException e) {
throw e.toActionExecutionException(this);
} finally {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
index 16f882fd11..3bdb6d48ed 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelWorkspaceStatusModule.java
@@ -24,6 +24,7 @@ import com.google.common.eventbus.Subscribe;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactFactory;
import com.google.devtools.build.lib.actions.ArtifactOwner;
@@ -177,7 +178,7 @@ public class BazelWorkspaceStatusModule extends BlazeModule {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException {
try {
Map<String, String> statusMap = parseWorkspaceStatus(
@@ -231,6 +232,7 @@ public class BazelWorkspaceStatusModule extends BlazeModule {
this,
true);
}
+ return ActionResult.EMPTY;
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index 5d6c3689d4..3d93900fa6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionLookupValue;
import com.google.devtools.build.lib.actions.ActionLookupValue.ActionLookupKey;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.ActionStatusMessage;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Artifact.ArtifactExpander;
@@ -37,6 +38,7 @@ import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.actions.ExecutionInfoSpecifier;
import com.google.devtools.build.lib.actions.ExecutionRequirements;
import com.google.devtools.build.lib.actions.ResourceSet;
+import com.google.devtools.build.lib.actions.SpawnResult;
import com.google.devtools.build.lib.actions.extra.CppCompileInfo;
import com.google.devtools.build.lib.actions.extra.EnvironmentVariable;
import com.google.devtools.build.lib.actions.extra.ExtraActionInfo;
@@ -1150,11 +1152,9 @@ public class CppCompileAction extends AbstractAction
@Override
@ThreadCompatible
- public void execute(
- ActionExecutionContext actionExecutionContext)
- throws ActionExecutionException, InterruptedException {
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
+ throws ActionExecutionException, InterruptedException {
setModuleFileFlags();
-
CppCompileActionContext.Reply reply;
ShowIncludesFilter showIncludesFilterForStdout = null;
ShowIncludesFilter showIncludesFilterForStderr = null;
@@ -1166,13 +1166,15 @@ public class CppCompileAction extends AbstractAction
actionExecutionContext.getFileOutErr().setOutputFilter(showIncludesFilterForStdout);
actionExecutionContext.getFileOutErr().setErrorFilter(showIncludesFilterForStderr);
}
+
+ Set<SpawnResult> spawnResults;
try {
CppCompileActionResult cppCompileActionResult =
actionExecutionContext
.getContext(actionContext)
.execWithReply(this, actionExecutionContext);
- // TODO(b/62588075) Save spawnResults from cppCompileActionResult and return them upwards.
reply = cppCompileActionResult.contextReply();
+ spawnResults = cppCompileActionResult.spawnResults();
} catch (ExecException e) {
throw e.toActionExecutionException(
"C++ compilation of rule '" + getOwner().getLabel() + "'",
@@ -1213,6 +1215,7 @@ public class CppCompileAction extends AbstractAction
actionExecutionContext.getArtifactExpander(),
actionExecutionContext.getEventHandler());
}
+ return ActionResult.create(spawnResults);
}
@VisibleForTesting
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
index 806ecfc96a..63a8b6ce88 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppLinkAction.java
@@ -26,6 +26,7 @@ import com.google.devtools.build.lib.actions.AbstractAction;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.CommandAction;
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
@@ -302,10 +303,11 @@ public final class CppLinkAction extends AbstractAction
@Override
@ThreadCompatible
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
if (fake) {
executeFake();
+ return ActionResult.EMPTY;
} else {
try {
Spawn spawn = new SimpleSpawn(
@@ -316,8 +318,10 @@ public final class CppLinkAction extends AbstractAction
ImmutableList.copyOf(getMandatoryInputs()),
getOutputs().asList(),
estimateResourceConsumptionLocal());
- actionExecutionContext.getSpawnActionContext(getMnemonic())
- .exec(spawn, actionExecutionContext);
+ return ActionResult.create(
+ actionExecutionContext
+ .getSpawnActionContext(getMnemonic())
+ .exec(spawn, actionExecutionContext));
} catch (ExecException e) {
throw e.toActionExecutionException(
"Linking of rule '" + getOwner().getLabel() + "'",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java
index ee8e92b2ef..c0da518642 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CreateIncSymlinkAction.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.actions.AbstractAction;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.util.Fingerprint;
@@ -61,8 +62,8 @@ public final class CreateIncSymlinkAction extends AbstractAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
- throws ActionExecutionException {
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
+ throws ActionExecutionException {
try {
for (Map.Entry<Artifact, Artifact> entry : symlinks.entrySet()) {
Path symlink = entry.getKey().getPath();
@@ -72,6 +73,7 @@ public final class CreateIncSymlinkAction extends AbstractAction {
String message = "IO Error while creating symlink";
throw new ActionExecutionException(message, e, this, false);
}
+ return ActionResult.EMPTY;
}
@VisibleForTesting
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtractInclusionAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtractInclusionAction.java
index e66fae1f63..1bd76c280c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtractInclusionAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/ExtractInclusionAction.java
@@ -19,6 +19,7 @@ import com.google.devtools.build.lib.actions.AbstractAction;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -64,7 +65,7 @@ final class ExtractInclusionAction extends AbstractAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
IncludeScanningContext context =
actionExecutionContext.getContext(IncludeScanningContext.class);
@@ -76,5 +77,6 @@ final class ExtractInclusionAction extends AbstractAction {
} catch (ExecException e) {
throw e.toActionExecutionException(this);
}
+ return ActionResult.EMPTY;
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
index dc36e72f69..7f00e3eb24 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java
@@ -23,9 +23,11 @@ import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.actions.ResourceSet;
+import com.google.devtools.build.lib.actions.SpawnResult;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible;
@@ -37,6 +39,7 @@ import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
+import java.util.Set;
import java.util.UUID;
import java.util.logging.Logger;
@@ -120,9 +123,10 @@ public class FakeCppCompileAction extends CppCompileAction {
@Override
@ThreadCompatible
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
setModuleFileFlags();
+ Set<SpawnResult> spawnResults;
// First, do a normal compilation, to generate the ".d" file. The generated object file is built
// to a temporary location (tempOutputFile) and ignored afterwards.
logger.info("Generating " + getDotdFile());
@@ -131,8 +135,8 @@ public class FakeCppCompileAction extends CppCompileAction {
try {
CppCompileActionResult cppCompileActionResult =
context.execWithReply(this, actionExecutionContext);
- // TODO(b/62588075) Save spawnResults from cppCompileActionResult and return them upwards.
reply = cppCompileActionResult.contextReply();
+ spawnResults = cppCompileActionResult.spawnResults();
} catch (ExecException e) {
throw e.toActionExecutionException(
"C++ compilation of rule '" + getOwner().getLabel() + "'",
@@ -238,6 +242,7 @@ public class FakeCppCompileAction extends CppCompileAction {
throw new ActionExecutionException("failed to create fake compile command for rule '"
+ getOwner().getLabel() + ": " + e.getMessage(), this, false);
}
+ return ActionResult.create(spawnResults);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java
index be9624625b..26b0276488 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoStubAction.java
@@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.actions.AbstractAction;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.vfs.Path;
@@ -43,7 +44,8 @@ public final class FdoStubAction extends AbstractAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext) {
+ public ActionResult execute(ActionExecutionContext actionExecutionContext) {
+ return ActionResult.EMPTY;
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java
index 98b3f2fa54..48b12a80ac 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/SolibSymlinkAction.java
@@ -20,6 +20,7 @@ import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Actions;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Root;
@@ -54,8 +55,8 @@ public final class SolibSymlinkAction extends AbstractAction {
}
@Override
- public void execute(
- ActionExecutionContext actionExecutionContext) throws ActionExecutionException {
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
+ throws ActionExecutionException {
Path mangledPath = symlink.getPath();
try {
mangledPath.createSymbolicLink(target);
@@ -63,6 +64,7 @@ public final class SolibSymlinkAction extends AbstractAction {
throw new ActionExecutionException("failed to create _solib symbolic link '"
+ symlink.prettyPrint() + "' to target '" + target + "'", e, this, false);
}
+ return ActionResult.EMPTY;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
index cabab193d3..0e179314a2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCompileAction.java
@@ -27,6 +27,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionInput;
import com.google.devtools.build.lib.actions.ActionOwner;
+import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactResolver;
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
@@ -213,9 +214,9 @@ public class ObjcCompileAction extends SpawnAction {
}
@Override
- public void execute(ActionExecutionContext actionExecutionContext)
+ public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
- super.execute(actionExecutionContext);
+ ActionResult actionResult = super.execute(actionExecutionContext);
if (dotdPruningPlan == HeaderDiscovery.DotdPruningMode.USE) {
IncludeScanningContext scanningContext =
@@ -232,6 +233,8 @@ public class ObjcCompileAction extends SpawnAction {
// haven't quite managed to get that right yet.
updateActionInputs(getInputs());
}
+
+ return actionResult;
}
@VisibleForTesting
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
index be0ba39ae3..81192024af 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
@@ -847,8 +847,9 @@ public final class SkyframeActionExecutor implements ActionExecutionContextFacto
// instead.
FileOutErr outErrBuffer = actionExecutionContext.getFileOutErr();
try {
+ // TODO(b/62588075): Now that execute() returns information about the execution, we could log
+ // the data to the invocations table.
action.execute(actionExecutionContext);
-
// Action terminated fine, now report the output.
// The .showOutput() method is not necessarily a quick check: in its
// current implementation it uses regular expression matching.