aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/actions/Spawn.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/actions/Spawn.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/Spawn.java122
1 files changed, 122 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Spawn.java b/src/main/java/com/google/devtools/build/lib/actions/Spawn.java
new file mode 100644
index 0000000000..2f905d0adc
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/actions/Spawn.java
@@ -0,0 +1,122 @@
+// Copyright 2014 Google Inc. 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.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.actions.extra.SpawnInfo;
+import com.google.devtools.build.lib.vfs.Path;
+import com.google.devtools.build.lib.vfs.PathFragment;
+
+import java.util.Collection;
+
+/**
+ * An object representing a subprocess to be invoked, including its command and
+ * arguments, its working directory, its environment, a boolean indicating
+ * whether remote execution is appropriate for this command, and if so, the set
+ * of files it is expected to read and write.
+ */
+public interface Spawn {
+
+ /**
+ * Returns true iff this command may be executed remotely.
+ */
+ boolean isRemotable();
+
+ /**
+ * Out-of-band data for this spawn. This can be used to signal hints (hardware requirements,
+ * local vs. remote) to the execution subsystem.
+ *
+ * <p>String tags from {@link
+ * com.google.devtools.build.lib.rules.test.TestTargetProperties#getExecutionInfo()} can be added
+ * as keys with arbitrary values to this map too.
+ */
+ ImmutableMap<String, String> getExecutionInfo();
+
+ /**
+ * Returns this Spawn as a Bourne shell command.
+ *
+ * @param workingDir the initial working directory of the command
+ */
+ String asShellCommand(Path workingDir);
+
+ /**
+ * Returns the runfiles data for remote execution. Format is (directory, manifest file).
+ */
+ ImmutableMap<PathFragment, Artifact> getRunfilesManifests();
+
+ /**
+ * Returns artifacts for filesets, so they can be scheduled on remote execution.
+ */
+ ImmutableList<Artifact> getFilesetManifests();
+
+ /**
+ * Returns a protocol buffer describing this spawn for use by the extra_action functionality.
+ */
+ SpawnInfo getExtraActionInfo();
+
+ /**
+ * Returns the command (the first element) and its arguments.
+ */
+ ImmutableList<String> getArguments();
+
+ /**
+ * Returns the initial environment of the process.
+ * If null, the environment is inherited from the parent process.
+ */
+ ImmutableMap<String, String> getEnvironment();
+
+ /**
+ * Returns the list of files that this command may read.
+ *
+ * <p>This method explicitly does not expand middleman artifacts. Pass the result
+ * to an appropriate utility method on {@link com.google.devtools.build.lib.actions.Artifact} to
+ * expand the middlemen.
+ *
+ * <p>This is for use with remote execution, so we can ship inputs before starting the
+ * command. Order stability across multiple calls should be upheld for performance reasons.
+ */
+ Iterable<? extends ActionInput> getInputFiles();
+
+ /**
+ * Returns the collection of files that this command must write. Callers should not mutate
+ * the result.
+ *
+ * <p>This is for use with remote execution, so remote execution does not have to guess what
+ * outputs the process writes. While the order does not affect the semantics, it should be
+ * stable so it can be cached.
+ */
+ Collection<? extends ActionInput> getOutputFiles();
+
+ /**
+ * Returns the resource owner for local fallback.
+ */
+ ActionMetadata getResourceOwner();
+
+ /**
+ * Returns the amount of resources needed for local fallback.
+ */
+ ResourceSet getLocalResources();
+
+ /**
+ * Returns the owner for this action. Production code should supply a non-null owner.
+ */
+ ActionOwner getOwner();
+
+ /**
+ * Returns a mnemonic (string constant) for this kind of spawn.
+ */
+ String getMnemonic();
+}