aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java47
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java5
4 files changed, 66 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
index a13b2818f0..bb39ec5ee2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkActionFactory.java
@@ -13,7 +13,10 @@
// limitations under the License.
package com.google.devtools.build.lib.analysis.skylark;
+import static java.util.stream.Collectors.toList;
+
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.actions.Action;
@@ -392,11 +395,45 @@ public class SkylarkActionFactory implements SkylarkActionFactoryApi {
}
} else {
// Users didn't pass 'tools', kick in compatibility modes
- // Full legacy support -- add tools from inputs
- for (Artifact artifact : inputArtifacts) {
- FilesToRunProvider provider = context.getExecutableRunfiles(artifact);
- if (provider != null) {
- builder.addTool(provider);
+ if (skylarkSemantics.incompatibleNoSupportToolsInActionInputs()) {
+ // In this mode we error out if we find any tools among the inputs
+ List<Artifact> tools = null;
+ for (Artifact artifact : inputArtifacts) {
+ FilesToRunProvider provider = context.getExecutableRunfiles(artifact);
+ if (provider != null) {
+ tools = tools != null ? tools : new ArrayList<>(1);
+ tools.add(artifact);
+ }
+ }
+ if (tools != null) {
+ String toolsAsString =
+ Joiner.on(", ")
+ .join(
+ tools
+ .stream()
+ .map(Artifact::getExecPathString)
+ .map(s -> "'" + s + "'")
+ .collect(toList()));
+ throw new EvalException(
+ location,
+ String.format(
+ "Found tool(s) %s in inputs. "
+ + "A tool is an input with executable=True set. "
+ + "All tools should be passed using the 'tools' "
+ + "argument instead of 'inputs' in order to make their runfiles available "
+ + "to the action. This safety check will not be performed once the action "
+ + "is modified to take a 'tools' argument. "
+ + "To temporarily disable this check, "
+ + "set --incompatible_no_support_tools_in_action_inputs=false.",
+ toolsAsString));
+ }
+ } else {
+ // Full legacy support -- add tools from inputs
+ for (Artifact artifact : inputArtifacts) {
+ FilesToRunProvider provider = context.getExecutableRunfiles(artifact);
+ if (provider != null) {
+ builder.addTool(provider);
+ }
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java
index 28b3c6747a..758eb39155 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsCodec.java
@@ -53,6 +53,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics
codedOut.writeBoolNoTag(semantics.incompatibleDisallowOldStyleArgsAdd());
codedOut.writeBoolNoTag(semantics.incompatibleDisallowSlashOperator());
codedOut.writeBoolNoTag(semantics.incompatibleNewActionsApi());
+ codedOut.writeBoolNoTag(semantics.incompatibleNoSupportToolsInActionInputs());
codedOut.writeBoolNoTag(semantics.incompatiblePackageNameIsAFunction());
codedOut.writeBoolNoTag(semantics.incompatibleRemoveNativeGitRepository());
codedOut.writeBoolNoTag(semantics.incompatibleRemoveNativeHttpArchive());
@@ -76,6 +77,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics
builder.incompatibleDisallowOldStyleArgsAdd(codedIn.readBool());
builder.incompatibleDisallowSlashOperator(codedIn.readBool());
builder.incompatibleNewActionsApi(codedIn.readBool());
+ builder.incompatibleNoSupportToolsInActionInputs(codedIn.readBool());
builder.incompatiblePackageNameIsAFunction(codedIn.readBool());
builder.incompatibleRemoveNativeGitRepository(codedIn.readBool());
builder.incompatibleRemoveNativeHttpArchive(codedIn.readBool());
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
index 82c89a025a..bc8a1390f0 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkSemanticsOptions.java
@@ -200,6 +200,22 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable
public boolean incompatibleNewActionsApi;
@Option(
+ name = "incompatible_no_support_tools_in_action_inputs",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ metadataTags = {
+ OptionMetadataTag.INCOMPATIBLE_CHANGE,
+ OptionMetadataTag.TRIGGERED_BY_ALL_INCOMPATIBLE_CHANGES
+ },
+ help =
+ "If set to true, tools should be passed to `ctx.actions.run()` and "
+ + "`ctx.actions.run_shell()` using the `tools` parameter instead of the `inputs` "
+ + "parameter. Furthermore, if this flag is set and a `tools` parameter is not "
+ + "passed to the action, it is an error for any tools to appear in the `inputs`.")
+ public boolean incompatibleNoSupportToolsInActionInputs;
+
+ @Option(
name = "incompatible_package_name_is_a_function",
defaultValue = "false",
documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
@@ -282,6 +298,7 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable
.incompatibleDisallowOldStyleArgsAdd(incompatibleDisallowOldStyleArgsAdd)
.incompatibleDisallowSlashOperator(incompatibleDisallowSlashOperator)
.incompatibleNewActionsApi(incompatibleNewActionsApi)
+ .incompatibleNoSupportToolsInActionInputs(incompatibleNoSupportToolsInActionInputs)
.incompatiblePackageNameIsAFunction(incompatiblePackageNameIsAFunction)
.incompatibleRemoveNativeGitRepository(incompatibleRemoveNativeGitRepository)
.incompatibleRemoveNativeHttpArchive(incompatibleRemoveNativeHttpArchive)
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
index d19b2db21c..1a5cc170b6 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
@@ -59,6 +59,8 @@ public abstract class SkylarkSemantics {
public abstract boolean incompatibleNewActionsApi();
+ public abstract boolean incompatibleNoSupportToolsInActionInputs();
+
public abstract boolean incompatiblePackageNameIsAFunction();
public abstract boolean incompatibleRemoveNativeGitRepository();
@@ -94,6 +96,7 @@ public abstract class SkylarkSemantics {
.incompatibleDisallowOldStyleArgsAdd(false)
.incompatibleDisallowSlashOperator(false)
.incompatibleNewActionsApi(false)
+ .incompatibleNoSupportToolsInActionInputs(false)
.incompatiblePackageNameIsAFunction(false)
.incompatibleRemoveNativeGitRepository(false)
.incompatibleRemoveNativeHttpArchive(false)
@@ -126,6 +129,8 @@ public abstract class SkylarkSemantics {
public abstract Builder incompatibleNewActionsApi(boolean value);
+ public abstract Builder incompatibleNoSupportToolsInActionInputs(boolean value);
+
public abstract Builder incompatiblePackageNameIsAFunction(boolean value);
public abstract Builder incompatibleRemoveNativeGitRepository(boolean value);