diff options
author | Klaus Aehlig <aehlig@google.com> | 2018-03-01 05:54:39 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-01 05:56:45 -0800 |
commit | ddd1c9a61eac72fff72f1d0d92214485c85df025 (patch) | |
tree | 812be17258f57e5c10103128f3a329191e6d9592 /src/main | |
parent | c92d54e99dbaaf34b5a8e315e164f468f7d7c559 (diff) |
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
Diffstat (limited to 'src/main')
5 files changed, 60 insertions, 0 deletions
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 0e203a5dd8..705f0140e6 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.bazel.rules.workspace.GitRepositoryRule; 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 class GitRepositoryFunction extends RepositoryFunction { 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 f5d567a49e..9be0ea495d 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.bazel.repository.downloader.HttpDownloader; 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 class NewGitRepositoryFunction extends GitRepositoryFunction { 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 a40ca667e6..9f729b5710 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.incompatibleRemoveNativeGitRepository()); codedOut.writeBoolNoTag(semantics.incompatibleRemoveNativeHttpArchive()); codedOut.writeBoolNoTag(semantics.incompatibleShowAllPrintMessages()); codedOut.writeBoolNoTag(semantics.incompatibleStringIsNotIterable()); @@ -73,6 +74,7 @@ public final class SkylarkSemanticsCodec implements ObjectCodec<SkylarkSemantics 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 c3e0d82cc6..3f22d8ca2c 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_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 @@ public class SkylarkSemanticsOptions extends OptionsBase implements Serializable .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 c5dca8ef7c..85f5c08be6 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 class SkylarkSemantics { public abstract boolean incompatibleNewActionsApi(); public abstract boolean incompatibleShowAllPrintMessages(); + public abstract boolean incompatibleRemoveNativeGitRepository(); + public abstract boolean incompatibleRemoveNativeHttpArchive(); public abstract boolean incompatibleStringIsNotIterable(); @@ -82,6 +84,7 @@ public abstract class SkylarkSemantics { .incompatibleDisallowUncalledSetConstructor(true) .incompatibleLoadArgumentIsLabel(true) .incompatibleNewActionsApi(false) + .incompatibleRemoveNativeGitRepository(false) .incompatibleRemoveNativeHttpArchive(false) .incompatibleShowAllPrintMessages(true) .incompatibleStringIsNotIterable(false) @@ -106,6 +109,8 @@ public abstract class SkylarkSemantics { 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); |