aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java29
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java20
-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.java14
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java13
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java2
6 files changed, 75 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java
index 6c973ea0a4..7bf642fed0 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/HttpArchiveFunction.java
@@ -22,7 +22,9 @@ import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper;
+import com.google.devtools.build.lib.skyframe.PrecomputedValue;
import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
@@ -30,6 +32,7 @@ import com.google.devtools.build.skyframe.SkyFunction.Environment;
import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
import java.io.IOException;
import java.util.Map;
+import javax.annotation.Nullable;
/**
* Downloads a file over HTTP.
@@ -56,10 +59,32 @@ public class HttpArchiveFunction extends RepositoryFunction {
}
}
+ @Nullable
@Override
- public RepositoryDirectoryValue.Builder fetch(Rule rule, Path outputDirectory,
- BlazeDirectories directories, Environment env, Map<String, String> markerData)
+ public RepositoryDirectoryValue.Builder fetch(
+ Rule rule,
+ Path outputDirectory,
+ BlazeDirectories directories,
+ Environment env,
+ Map<String, String> markerData)
throws RepositoryFunctionException, InterruptedException {
+ // Deprecation in favor of the Skylark variant.
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ if (skylarkSemantics == null) {
+ return null;
+ }
+ if (skylarkSemantics.incompatibleRemoveNativeHttpArchive()) {
+ throw new RepositoryFunctionException(
+ new EvalException(
+ null,
+ "The native http_archive rule is deprecated."
+ + " load(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\") for a"
+ + " drop-in replacement."
+ + "\nUse --incompatible_remove_native_http_archive=false to temporarily continue"
+ + " using the native rule."),
+ Transience.PERSISTENT);
+ }
+
// The output directory is always under output_base/external (to stay out of the way of
// artifacts from this repository) and uses the rule's name to avoid conflicts with other
// remote repository rules. For example, suppose you had the following WORKSPACE file:
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java
index ba042bfd7d..73bf8c7102 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewHttpArchiveFunction.java
@@ -20,7 +20,9 @@ import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.rules.repository.NewRepositoryFileHandler;
import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
import com.google.devtools.build.lib.rules.repository.WorkspaceAttributeMapper;
+import com.google.devtools.build.lib.skyframe.PrecomputedValue;
import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
@@ -45,6 +47,24 @@ public class NewHttpArchiveFunction extends HttpArchiveFunction {
public RepositoryDirectoryValue.Builder fetch(Rule rule, Path outputDirectory,
BlazeDirectories directories, Environment env, Map<String, String> markerData)
throws RepositoryFunctionException, InterruptedException {
+ // Deprecation in favor of the Skylark variant.
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ if (skylarkSemantics == null) {
+ return null;
+ }
+ if (skylarkSemantics.incompatibleRemoveNativeHttpArchive()) {
+ throw new RepositoryFunctionException(
+ new EvalException(
+ null,
+ "The native new_http_archive rule is deprecated."
+ + " load(\"@bazel_tools//tools/build_defs/repo:http.bzl\", \"http_archive\") for a"
+ + " drop-in replacement."
+ + "\nUse --incompatible_remove_native_http_archive=false to temporarily continue"
+ + " using the native rule."),
+ Transience.PERSISTENT);
+ }
+
+ // The output directory is always under output_base/external (to stay out of the way of
NewRepositoryFileHandler fileHandler = new NewRepositoryFileHandler(directories.getWorkspace());
if (!fileHandler.prepareFile(rule, env)) {
return null;
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 fde47f5c62..a40ca667e6 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
@@ -52,6 +52,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics
codedOut.writeBoolNoTag(semantics.incompatibleDisallowUncalledSetConstructor());
codedOut.writeBoolNoTag(semantics.incompatibleLoadArgumentIsLabel());
codedOut.writeBoolNoTag(semantics.incompatibleNewActionsApi());
+ codedOut.writeBoolNoTag(semantics.incompatibleRemoveNativeHttpArchive());
codedOut.writeBoolNoTag(semantics.incompatibleShowAllPrintMessages());
codedOut.writeBoolNoTag(semantics.incompatibleStringIsNotIterable());
codedOut.writeBoolNoTag(semantics.internalSkylarkFlagTestCanary());
@@ -72,6 +73,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics
builder.incompatibleDisallowUncalledSetConstructor(codedIn.readBool());
builder.incompatibleLoadArgumentIsLabel(codedIn.readBool());
builder.incompatibleNewActionsApi(codedIn.readBool());
+ builder.incompatibleRemoveNativeHttpArchive(codedIn.readBool());
builder.incompatibleShowAllPrintMessages(codedIn.readBool());
builder.incompatibleStringIsNotIterable(codedIn.readBool());
builder.internalSkylarkFlagTestCanary(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 36dfbe0f01..e901353f79 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
@@ -171,6 +171,19 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable
public boolean incompatibleNewActionsApi;
@Option(
+ name = "incompatible_remove_native_http_archive",
+ defaultValue = "false",
+ category = "incompatible changes",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+ help =
+ "If set to true, the native http_archive rules are disabled; only the skylark version "
+ + "will be available"
+ )
+ public boolean incompatibleRemoveNativeHttpArchive;
+
+ @Option(
name = "incompatible_show_all_print_messages",
defaultValue = "true",
category = "incompatible changes",
@@ -219,6 +232,7 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable
.incompatibleDisallowUncalledSetConstructor(incompatibleDisallowUncalledSetConstructor)
.incompatibleLoadArgumentIsLabel(incompatibleLoadArgumentIsLabel)
.incompatibleNewActionsApi(incompatibleNewActionsApi)
+ .incompatibleRemoveNativeHttpArchive(incompatibleRemoveNativeHttpArchive)
.incompatibleShowAllPrintMessages(incompatibleShowAllPrintMessages)
.incompatibleStringIsNotIterable(incompatibleStringIsNotIterable)
.internalSkylarkFlagTestCanary(internalSkylarkFlagTestCanary)
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 ccdef1eb5f..d14a09c694 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
@@ -52,6 +52,9 @@ public abstract class SkylarkSemantics {
public abstract boolean incompatibleLoadArgumentIsLabel();
public abstract boolean incompatibleNewActionsApi();
public abstract boolean incompatibleShowAllPrintMessages();
+
+ public abstract boolean incompatibleRemoveNativeHttpArchive();
+
public abstract boolean incompatibleStringIsNotIterable();
public abstract boolean internalSkylarkFlagTestCanary();
@@ -79,10 +82,11 @@ public abstract class SkylarkSemantics {
.incompatibleDisallowUncalledSetConstructor(true)
.incompatibleLoadArgumentIsLabel(true)
.incompatibleNewActionsApi(false)
+ .incompatibleRemoveNativeHttpArchive(false)
.incompatibleShowAllPrintMessages(true)
- .incompatibleStringIsNotIterable(false)
- .internalSkylarkFlagTestCanary(false)
- .build();
+ .incompatibleStringIsNotIterable(false)
+ .internalSkylarkFlagTestCanary(false)
+ .build();
/** Builder for {@link SkylarkSemantics}. All fields are mandatory. */
@AutoValue.Builder
@@ -101,6 +105,9 @@ public abstract class SkylarkSemantics {
public abstract Builder incompatibleDisallowUncalledSetConstructor(boolean value);
public abstract Builder incompatibleLoadArgumentIsLabel(boolean value);
public abstract Builder incompatibleNewActionsApi(boolean value);
+
+ public abstract Builder incompatibleRemoveNativeHttpArchive(boolean value);
+
public abstract Builder incompatibleShowAllPrintMessages(boolean value);
public abstract Builder incompatibleStringIsNotIterable(boolean value);
public abstract Builder internalSkylarkFlagTestCanary(boolean value);
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index 276a1c2bc8..df6ee43a24 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -128,6 +128,7 @@ public class SkylarkSemanticsConsistencyTest {
"--incompatible_disallow_uncalled_set_constructor=" + rand.nextBoolean(),
"--incompatible_load_argument_is_label=" + rand.nextBoolean(),
"--incompatible_new_actions_api=" + rand.nextBoolean(),
+ "--incompatible_remove_native_http_archive=" + rand.nextBoolean(),
"--incompatible_show_all_print_messages=" + rand.nextBoolean(),
"--incompatible_string_is_not_iterable=" + rand.nextBoolean(),
"--internal_skylark_flag_test_canary=" + rand.nextBoolean());
@@ -149,6 +150,7 @@ public class SkylarkSemanticsConsistencyTest {
.incompatibleDisallowUncalledSetConstructor(rand.nextBoolean())
.incompatibleLoadArgumentIsLabel(rand.nextBoolean())
.incompatibleNewActionsApi(rand.nextBoolean())
+ .incompatibleRemoveNativeHttpArchive(rand.nextBoolean())
.incompatibleShowAllPrintMessages(rand.nextBoolean())
.incompatibleStringIsNotIterable(rand.nextBoolean())
.internalSkylarkFlagTestCanary(rand.nextBoolean())