Deprecate native git_repository
The skylark implementation of git_repository is a drop-in replacement
for the native workspace rule. So deprecate the latter to avoid having
two implementations of the same. Also, the native rule pulls in quite
some dependencies.
RELNOTES: The native git_repository rule is deprecated. Use the
Skylark version available via load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
instead.
Change-Id: Id75d8e7b7377acd1092c4ba993f488be86c03fa0
PiperOrigin-RevId: 187466931
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/GitRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/GitRepositoryFunction.java
index 0e203a5..705f014 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/GitRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/GitRepositoryFunction.java
@@ -22,6 +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.skyframe.PrecomputedValue;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
@@ -50,6 +53,22 @@
public RepositoryDirectoryValue.Builder fetch(Rule rule, Path outputDirectory,
BlazeDirectories directories, Environment env, Map<String, String> markerData)
throws InterruptedException, RepositoryFunctionException {
+ // Deprecation in favor of the Skylark variant.
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ if (skylarkSemantics == null) {
+ return null;
+ }
+ if (skylarkSemantics.incompatibleRemoveNativeGitRepository()) {
+ throw new RepositoryFunctionException(
+ new EvalException(null,
+ "The native git_repository rule is deprecated."
+ + " load(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\") for a"
+ + " replacement."
+ + "\nUse --incompatible_remove_native_git_repository=false to temporarily continue"
+ + " using the native rule."),
+ Transience.PERSISTENT);
+ }
+
createDirectory(outputDirectory, rule);
GitCloner.clone(rule, outputDirectory, env.getListener(), clientEnvironment, downloader);
return RepositoryDirectoryValue.builder().setPath(outputDirectory);
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewGitRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewGitRepositoryFunction.java
index f5d567a..9be0ea4 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/NewGitRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/NewGitRepositoryFunction.java
@@ -19,8 +19,12 @@
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.skyframe.PrecomputedValue;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.SkylarkSemantics;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.skyframe.SkyFunction.Environment;
+import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
import java.util.Map;
/**
@@ -35,6 +39,22 @@
public RepositoryDirectoryValue.Builder fetch(Rule rule, Path outputDirectory,
BlazeDirectories directories, Environment env, Map<String, String> markerData)
throws InterruptedException, RepositoryFunctionException {
+ // Deprecation in favor of the Skylark variant.
+ SkylarkSemantics skylarkSemantics = PrecomputedValue.SKYLARK_SEMANTICS.get(env);
+ if (skylarkSemantics == null) {
+ return null;
+ }
+ if (skylarkSemantics.incompatibleRemoveNativeGitRepository()) {
+ throw new RepositoryFunctionException(
+ new EvalException(null,
+ "The native git_repository rule is deprecated."
+ + " load(\"@bazel_tools//tools/build_defs/repo:git.bzl\", \"git_repository\") for a"
+ + " replacement."
+ + "\nUse --incompatible_remove_native_git_repository=false to temporarily continue"
+ + " using the native rule."),
+ Transience.PERSISTENT);
+ }
+
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 a40ca66..9f729b5 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 @@
codedOut.writeBoolNoTag(semantics.incompatibleDisallowUncalledSetConstructor());
codedOut.writeBoolNoTag(semantics.incompatibleLoadArgumentIsLabel());
codedOut.writeBoolNoTag(semantics.incompatibleNewActionsApi());
+ codedOut.writeBoolNoTag(semantics.incompatibleRemoveNativeGitRepository());
codedOut.writeBoolNoTag(semantics.incompatibleRemoveNativeHttpArchive());
codedOut.writeBoolNoTag(semantics.incompatibleShowAllPrintMessages());
codedOut.writeBoolNoTag(semantics.incompatibleStringIsNotIterable());
@@ -73,6 +74,7 @@
builder.incompatibleDisallowUncalledSetConstructor(codedIn.readBool());
builder.incompatibleLoadArgumentIsLabel(codedIn.readBool());
builder.incompatibleNewActionsApi(codedIn.readBool());
+ builder.incompatibleRemoveNativeGitRepository(codedIn.readBool());
builder.incompatibleRemoveNativeHttpArchive(codedIn.readBool());
builder.incompatibleShowAllPrintMessages(codedIn.readBool());
builder.incompatibleStringIsNotIterable(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 c3e0d82..3f22d8c 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 boolean incompatibleNewActionsApi;
@Option(
+ name = "incompatible_remove_native_git_repository",
+ defaultValue = "false",
+ category = "incompatible changes",
+ documentationCategory = OptionDocumentationCategory.UNCATEGORIZED,
+ effectTags = {OptionEffectTag.UNKNOWN},
+ metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+ help =
+ "If set to true, the native git_repository rules are disabled; only the skylark version "
+ + "will be available"
+ )
+ public boolean incompatibleRemoveNativeGitRepository;
+
+ @Option(
name = "incompatible_remove_native_http_archive",
defaultValue = "false",
category = "incompatible changes",
@@ -232,6 +245,7 @@
.incompatibleDisallowUncalledSetConstructor(incompatibleDisallowUncalledSetConstructor)
.incompatibleLoadArgumentIsLabel(incompatibleLoadArgumentIsLabel)
.incompatibleNewActionsApi(incompatibleNewActionsApi)
+ .incompatibleRemoveNativeGitRepository(incompatibleRemoveNativeGitRepository)
.incompatibleRemoveNativeHttpArchive(incompatibleRemoveNativeHttpArchive)
.incompatibleShowAllPrintMessages(incompatibleShowAllPrintMessages)
.incompatibleStringIsNotIterable(incompatibleStringIsNotIterable)
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 c5dca8e..85f5c08 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
@@ -53,6 +53,8 @@
public abstract boolean incompatibleNewActionsApi();
public abstract boolean incompatibleShowAllPrintMessages();
+ public abstract boolean incompatibleRemoveNativeGitRepository();
+
public abstract boolean incompatibleRemoveNativeHttpArchive();
public abstract boolean incompatibleStringIsNotIterable();
@@ -82,6 +84,7 @@
.incompatibleDisallowUncalledSetConstructor(true)
.incompatibleLoadArgumentIsLabel(true)
.incompatibleNewActionsApi(false)
+ .incompatibleRemoveNativeGitRepository(false)
.incompatibleRemoveNativeHttpArchive(false)
.incompatibleShowAllPrintMessages(true)
.incompatibleStringIsNotIterable(false)
@@ -106,6 +109,8 @@
public abstract Builder incompatibleLoadArgumentIsLabel(boolean value);
public abstract Builder incompatibleNewActionsApi(boolean value);
+ public abstract Builder incompatibleRemoveNativeGitRepository(boolean value);
+
public abstract Builder incompatibleRemoveNativeHttpArchive(boolean value);
public abstract Builder incompatibleShowAllPrintMessages(boolean value);