Automated rollback of commit 3774f005792283b7ca6f2fa299a665f0c2ce459b.
*** Reason for rollback ***
Performance regression, b/294105788
*** Original change description ***
Implement REPO.bazel
- REPO.bazel is a new file at the root of repos that can only contain a `repo()` call with a bunch of package default arguments (similar to `package()`)
- A new SkyFunction, RepoFileFunction, evaluates a REPO.bazel file and returns the `PackageArgs` object containing those arguments
- PackageFunction for packages in repo `@foo` now depends on RepoFileFunction for `@foo`
Fixes https://github.com/bazelbuild/bazel/issues/18077
PiperOrigin-RevId: 553500673
Change-Id: I866e73262ab75635c8927f8c77eb5412c01e16a9
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkGlobalsImpl.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkGlobalsImpl.java
index b24c47c..2a5d42d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkGlobalsImpl.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkGlobalsImpl.java
@@ -22,7 +22,6 @@
import com.google.devtools.build.lib.collect.nestedset.Depset;
import com.google.devtools.build.lib.packages.BuildGlobals;
import com.google.devtools.build.lib.packages.Proto;
-import com.google.devtools.build.lib.packages.RepoCallable;
import com.google.devtools.build.lib.packages.SelectorList;
import com.google.devtools.build.lib.packages.StarlarkGlobals;
import com.google.devtools.build.lib.packages.StarlarkNativeModule;
@@ -121,11 +120,4 @@
env.put("struct", StructProvider.STRUCT);
return env.buildOrThrow();
}
-
- @Override
- public ImmutableMap<String, Object> getRepoToplevels() {
- ImmutableMap.Builder<String, Object> env = ImmutableMap.builder();
- Starlark.addMethods(env, RepoCallable.INSTANCE);
- return env.buildOrThrow();
- }
}
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/LabelConstants.java b/src/main/java/com/google/devtools/build/lib/cmdline/LabelConstants.java
index 3a57971..783396f 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/LabelConstants.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/LabelConstants.java
@@ -44,7 +44,6 @@
public static final PathFragment WORKSPACE_DOT_BAZEL_FILE_NAME =
PathFragment.create("WORKSPACE.bazel");
public static final PathFragment MODULE_DOT_BAZEL_FILE_NAME = PathFragment.create("MODULE.bazel");
- public static final PathFragment REPO_FILE_NAME = PathFragment.create("REPO.bazel");
public static final PathFragment MODULE_LOCKFILE_NAME = PathFragment.create("MODULE.bazel.lock");
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageArgs.java b/src/main/java/com/google/devtools/build/lib/packages/PackageArgs.java
index 5397186..bacf3d7 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageArgs.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageArgs.java
@@ -37,8 +37,6 @@
*/
@AutoValue
public abstract class PackageArgs {
- public static final PackageArgs EMPTY = PackageArgs.builder().build();
-
public static final PackageArgs DEFAULT =
PackageArgs.builder()
.setDefaultVisibility(RuleVisibility.PRIVATE)
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RepoCallable.java b/src/main/java/com/google/devtools/build/lib/packages/RepoCallable.java
deleted file mode 100644
index a78514b..0000000
--- a/src/main/java/com/google/devtools/build/lib/packages/RepoCallable.java
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2023 The Bazel Authors. 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.packages;
-
-import java.util.Map;
-import net.starlark.java.annot.Param;
-import net.starlark.java.annot.StarlarkMethod;
-import net.starlark.java.eval.EvalException;
-import net.starlark.java.eval.Starlark;
-import net.starlark.java.eval.StarlarkThread;
-
-/** Definition of the {@code repo()} function used in REPO.bazel files. */
-public final class RepoCallable {
- private RepoCallable() {}
-
- public static final RepoCallable INSTANCE = new RepoCallable();
-
- @StarlarkMethod(
- name = "repo",
- documented = false, // documented separately
- extraKeywords = @Param(name = "kwargs"),
- useStarlarkThread = true)
- public Object repoCallable(Map<String, Object> kwargs, StarlarkThread thread)
- throws EvalException {
- RepoThreadContext context = RepoThreadContext.fromOrFail(thread, "repo()");
- if (context.isRepoFunctionCalled()) {
- throw Starlark.errorf("'repo' can only be called once in the REPO.bazel file");
- }
- context.setRepoFunctionCalled();
-
- if (kwargs.isEmpty()) {
- throw Starlark.errorf("at least one argument must be given to the 'repo' function");
- }
-
- PackageArgs.Builder pkgArgsBuilder = PackageArgs.builder();
- for (Map.Entry<String, Object> kwarg : kwargs.entrySet()) {
- PackageArgs.processParam(
- kwarg.getKey(),
- kwarg.getValue(),
- "repo() argument '" + kwarg.getKey() + "'",
- context.getLabelConverter(),
- pkgArgsBuilder);
- }
- context.setPackageArgs(pkgArgsBuilder.build());
- return Starlark.NONE;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RepoThreadContext.java b/src/main/java/com/google/devtools/build/lib/packages/RepoThreadContext.java
deleted file mode 100644
index 25bc13e..0000000
--- a/src/main/java/com/google/devtools/build/lib/packages/RepoThreadContext.java
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright 2023 The Bazel Authors. 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.packages;
-
-import net.starlark.java.eval.EvalException;
-import net.starlark.java.eval.Starlark;
-import net.starlark.java.eval.StarlarkThread;
-
-/** Context object for a Starlark thread evaluating the REPO.bazel file. */
-public class RepoThreadContext {
- private final LabelConverter labelConverter;
- private PackageArgs packageArgs = PackageArgs.EMPTY;
- private boolean repoFunctionCalled = false;
-
- public static RepoThreadContext fromOrFail(StarlarkThread thread, String what)
- throws EvalException {
- RepoThreadContext context = thread.getThreadLocal(RepoThreadContext.class);
- if (context == null) {
- throw Starlark.errorf("%s can only be called from REPO.bazel", what);
- }
- return context;
- }
-
- public void storeInThread(StarlarkThread thread) {
- thread.setThreadLocal(RepoThreadContext.class, this);
- }
-
- public RepoThreadContext(LabelConverter labelConverter) {
- this.labelConverter = labelConverter;
- }
-
- public LabelConverter getLabelConverter() {
- return labelConverter;
- }
-
- public boolean isRepoFunctionCalled() {
- return repoFunctionCalled;
- }
-
- public void setRepoFunctionCalled() {
- repoFunctionCalled = true;
- }
-
- public void setPackageArgs(PackageArgs packageArgs) {
- this.packageArgs = packageArgs;
- }
-
- public PackageArgs getPackageArgs() {
- return packageArgs;
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkGlobals.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkGlobals.java
index 6937061..a27d630 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkGlobals.java
@@ -64,7 +64,4 @@
/** Returns the top-levels for .scl files. */
ImmutableMap<String, Object> getSclToplevels();
-
- /** Returns the top-levels for REPO.bazel files. */
- ImmutableMap<String, Object> getRepoToplevels();
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java
index 9dbb232..3017d40 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/StarlarkNativeModule.java
@@ -68,6 +68,7 @@
import net.starlark.java.syntax.Location;
/** The Starlark native module. */
+// TODO(cparsons): Move the definition of native.package() to this class.
public class StarlarkNativeModule implements StarlarkNativeModuleApi {
private static final GoogleLogger logger = GoogleLogger.forEnclosingClass();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
index 64b14d6..946a3de 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -167,8 +167,6 @@
":recursive_package_provider_backed_target_pattern_resolver",
":recursive_pkg_function",
":recursive_pkg_value",
- ":repo_file_function",
- ":repo_file_value",
":repository_mapping_function",
":repository_mapping_value",
":rule_configured_target_value",
@@ -2196,40 +2194,6 @@
)
java_library(
- name = "repo_file_function",
- srcs = ["RepoFileFunction.java"],
- deps = [
- ":precomputed_value",
- ":repo_file_value",
- ":repository_mapping_value",
- "//src/main/java/com/google/devtools/build/lib/actions:file_metadata",
- "//src/main/java/com/google/devtools/build/lib/cmdline",
- "//src/main/java/com/google/devtools/build/lib/events",
- "//src/main/java/com/google/devtools/build/lib/packages",
- "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_directory_value",
- "//src/main/java/com/google/devtools/build/lib/vfs",
- "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
- "//src/main/java/com/google/devtools/build/skyframe",
- "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
- "//src/main/java/net/starlark/java/eval",
- "//src/main/java/net/starlark/java/syntax",
- "//third_party:jsr305",
- ],
-)
-
-java_library(
- name = "repo_file_value",
- srcs = ["RepoFileValue.java"],
- deps = [
- ":sky_functions",
- "//src/main/java/com/google/devtools/build/lib/cmdline",
- "//src/main/java/com/google/devtools/build/lib/packages",
- "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
- "//third_party:auto_value",
- ],
-)
-
-java_library(
name = "repository_mapping_function",
srcs = ["RepositoryMappingFunction.java"],
deps = [
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index f3ca4d7..00f1ac5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -63,7 +63,6 @@
import com.google.devtools.build.lib.server.FailureDetails.PackageLoading.Code;
import com.google.devtools.build.lib.skyframe.BzlLoadFunction.BzlLoadFailedException;
import com.google.devtools.build.lib.skyframe.GlobValue.InvalidGlobPatternException;
-import com.google.devtools.build.lib.skyframe.RepoFileFunction.BadRepoFileException;
import com.google.devtools.build.lib.skyframe.StarlarkBuiltinsFunction.BuiltinsFailedException;
import com.google.devtools.build.lib.util.DetailedExitCode;
import com.google.devtools.build.lib.util.Pair;
@@ -1241,24 +1240,6 @@
IgnoredPackagePrefixesValue repositoryIgnoredPackagePrefixes =
(IgnoredPackagePrefixesValue)
env.getValue(IgnoredPackagePrefixesValue.key(packageId.getRepository()));
- RepoFileValue repoFileValue;
- try {
- repoFileValue =
- (RepoFileValue)
- env.getValueOrThrow(
- RepoFileValue.key(packageId.getRepository()),
- IOException.class,
- BadRepoFileException.class);
- } catch (IOException | BadRepoFileException e) {
- throw PackageFunctionException.builder()
- .setType(PackageFunctionException.Type.BUILD_FILE_CONTAINS_ERRORS)
- .setPackageIdentifier(packageId)
- .setTransience(Transience.PERSISTENT)
- .setException(e)
- .setMessage("bad REPO.bazel file")
- .setPackageLoadingCode(PackageLoading.Code.BAD_REPO_FILE)
- .build();
- }
if (env.valuesMissing()) {
return null;
}
@@ -1394,9 +1375,8 @@
.setFilename(buildFileRootedPath)
.setConfigSettingVisibilityPolicy(configSettingVisibilityPolicy);
- pkgBuilder
- .mergePackageArgsFrom(PackageArgs.builder().setDefaultVisibility(defaultVisibility))
- .mergePackageArgsFrom(repoFileValue.packageArgs());
+ pkgBuilder.mergePackageArgsFrom(
+ PackageArgs.builder().setDefaultVisibility(defaultVisibility));
Set<SkyKey> globDepKeys = ImmutableSet.of();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepoFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepoFileFunction.java
deleted file mode 100644
index 4d77052..0000000
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RepoFileFunction.java
+++ /dev/null
@@ -1,195 +0,0 @@
-// Copyright 2023 The Bazel Authors. 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.skyframe;
-
-import com.google.devtools.build.lib.actions.FileValue;
-import com.google.devtools.build.lib.cmdline.LabelConstants;
-import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.cmdline.RepositoryMapping;
-import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.events.Event;
-import com.google.devtools.build.lib.events.ExtendedEventHandler;
-import com.google.devtools.build.lib.packages.BazelStarlarkEnvironment;
-import com.google.devtools.build.lib.packages.LabelConverter;
-import com.google.devtools.build.lib.packages.PackageArgs;
-import com.google.devtools.build.lib.packages.RepoThreadContext;
-import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue;
-import com.google.devtools.build.lib.vfs.FileSystemUtils;
-import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.build.lib.vfs.PathFragment;
-import com.google.devtools.build.lib.vfs.Root;
-import com.google.devtools.build.lib.vfs.RootedPath;
-import com.google.devtools.build.skyframe.SkyFunction;
-import com.google.devtools.build.skyframe.SkyFunctionException;
-import com.google.devtools.build.skyframe.SkyFunctionException.Transience;
-import com.google.devtools.build.skyframe.SkyKey;
-import com.google.devtools.build.skyframe.SkyValue;
-import java.io.IOException;
-import javax.annotation.Nullable;
-import net.starlark.java.eval.EvalException;
-import net.starlark.java.eval.Module;
-import net.starlark.java.eval.Mutability;
-import net.starlark.java.eval.Starlark;
-import net.starlark.java.eval.StarlarkSemantics;
-import net.starlark.java.eval.StarlarkThread;
-import net.starlark.java.syntax.ParserInput;
-import net.starlark.java.syntax.Program;
-import net.starlark.java.syntax.StarlarkFile;
-import net.starlark.java.syntax.SyntaxError;
-
-/** The function to evaluate the REPO.bazel file at the root of a repo. */
-public class RepoFileFunction implements SkyFunction {
- private final BazelStarlarkEnvironment starlarkEnv;
- private final Path workspaceRoot;
-
- public RepoFileFunction(BazelStarlarkEnvironment starlarkEnv, Path workspaceRoot) {
- this.starlarkEnv = starlarkEnv;
- this.workspaceRoot = workspaceRoot;
- }
-
- @Nullable
- @Override
- public SkyValue compute(SkyKey skyKey, Environment env)
- throws SkyFunctionException, InterruptedException {
- RepositoryName repoName = (RepositoryName) skyKey.argument();
- // First we need to find the REPO.bazel file. How we do this depends on whether this is for the
- // main repo or an external repo.
- Path repoRoot;
- if (repoName.isMain()) {
- repoRoot = workspaceRoot;
- } else {
- RepositoryDirectoryValue repoDirValue =
- (RepositoryDirectoryValue) env.getValue(RepositoryDirectoryValue.key(repoName));
- if (repoDirValue == null) {
- return null;
- }
- repoRoot = repoDirValue.getPath();
- }
- RootedPath repoFilePath =
- RootedPath.toRootedPath(Root.fromPath(repoRoot), LabelConstants.REPO_FILE_NAME);
- FileValue repoFileValue = (FileValue) env.getValue(FileValue.key(repoFilePath));
- if (repoFileValue == null) {
- return null;
- }
- if (!repoFileValue.exists()) {
- // It's okay to not have a REPO.bazel file.
- return RepoFileValue.of(PackageArgs.EMPTY);
- }
-
- // Now we can actually evaluate the file.
- StarlarkSemantics starlarkSemantics = PrecomputedValue.STARLARK_SEMANTICS.get(env);
- RepositoryMappingValue repoMapping =
- (RepositoryMappingValue) env.getValue(RepositoryMappingValue.key(repoName));
- RepositoryMappingValue mainRepoMapping =
- (RepositoryMappingValue) env.getValue(RepositoryMappingValue.key(RepositoryName.MAIN));
- if (env.valuesMissing()) {
- return null;
- }
- StarlarkFile repoFile = readAndParseRepoFile(repoFilePath.asPath(), env);
- PackageArgs packageArgs =
- evalRepoFile(
- repoFile,
- repoName,
- getDisplayNameForRepo(repoName, mainRepoMapping.getRepositoryMapping()),
- repoMapping.getRepositoryMapping(),
- starlarkSemantics,
- env.getListener());
-
- return RepoFileValue.of(packageArgs);
- }
-
- private static StarlarkFile readAndParseRepoFile(Path path, Environment env)
- throws RepoFileFunctionException {
- byte[] contents;
- try {
- contents = FileSystemUtils.readWithKnownFileSize(path, path.getFileSize());
- } catch (IOException e) {
- throw new RepoFileFunctionException(
- new IOException("error reading REPO.bazel file at " + path, e), Transience.TRANSIENT);
- }
- StarlarkFile starlarkFile =
- StarlarkFile.parse(ParserInput.fromUTF8(contents, path.getPathString()));
- if (!starlarkFile.ok()) {
- Event.replayEventsOn(env.getListener(), starlarkFile.errors());
- throw new RepoFileFunctionException(
- new BadRepoFileException("error parsing REPO.bazel file at " + path));
- }
- return starlarkFile;
- }
-
- private static String getDisplayNameForRepo(
- RepositoryName repoName, RepositoryMapping mainRepoMapping) {
- String displayName = repoName.getDisplayForm(mainRepoMapping);
- if (displayName.isEmpty()) {
- return "the main repo";
- }
- return displayName;
- }
-
- private PackageArgs evalRepoFile(
- StarlarkFile starlarkFile,
- RepositoryName repoName,
- String repoDisplayName,
- RepositoryMapping repoMapping,
- StarlarkSemantics starlarkSemantics,
- ExtendedEventHandler handler)
- throws RepoFileFunctionException, InterruptedException {
- try (Mutability mu = Mutability.create("repo file", repoName)) {
- Module predeclared =
- Module.withPredeclared(
- starlarkSemantics, starlarkEnv.getStarlarkGlobals().getRepoToplevels());
- Program program = Program.compileFile(starlarkFile, predeclared);
- // TODO(wyv): check that `program` has no `def`, `if`, etc
- StarlarkThread thread = new StarlarkThread(mu, starlarkSemantics);
- thread.setPrintHandler(Event.makeDebugPrintHandler(handler));
- RepoThreadContext context =
- new RepoThreadContext(
- new LabelConverter(
- PackageIdentifier.create(repoName, PathFragment.EMPTY_FRAGMENT), repoMapping));
- context.storeInThread(thread);
- Starlark.execFileProgram(program, predeclared, thread);
- return context.getPackageArgs();
- } catch (SyntaxError.Exception e) {
- Event.replayEventsOn(handler, e.errors());
- throw new RepoFileFunctionException(
- new BadRepoFileException("error parsing REPO.bazel file for " + repoDisplayName, e));
- } catch (EvalException e) {
- handler.handle(Event.error(e.getMessageWithStack()));
- throw new RepoFileFunctionException(
- new BadRepoFileException("error evaluating REPO.bazel file for " + repoDisplayName, e));
- }
- }
-
- /** Thrown when something is wrong with the contents of the REPO.bazel file of a certain repo. */
- public static class BadRepoFileException extends Exception {
- public BadRepoFileException(String message) {
- super(message);
- }
-
- public BadRepoFileException(String message, Exception cause) {
- super(message, cause);
- }
- }
-
- static class RepoFileFunctionException extends SkyFunctionException {
- private RepoFileFunctionException(IOException e, Transience transience) {
- super(e, transience);
- }
-
- private RepoFileFunctionException(BadRepoFileException e) {
- super(e, Transience.PERSISTENT);
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepoFileValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepoFileValue.java
deleted file mode 100644
index 34763fe..0000000
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RepoFileValue.java
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2023 The Bazel Authors. 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.skyframe;
-
-import com.google.auto.value.AutoValue;
-import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.packages.PackageArgs;
-import com.google.devtools.build.skyframe.AbstractSkyKey;
-import com.google.devtools.build.skyframe.SkyFunctionName;
-import com.google.devtools.build.skyframe.SkyValue;
-
-/** Contains information about the REPO.bazel file at the root of a repo. */
-@AutoValue
-public abstract class RepoFileValue implements SkyValue {
- public static final RepoFileValue EMPTY = of(PackageArgs.EMPTY);
-
- public abstract PackageArgs packageArgs();
-
- public static RepoFileValue of(PackageArgs packageArgs) {
- return new AutoValue_RepoFileValue(packageArgs);
- }
-
- public static Key key(RepositoryName repoName) {
- return new Key(repoName);
- }
-
- /** Key type for {@link RepoFileValue}. */
- public static class Key extends AbstractSkyKey<RepositoryName> {
-
- private Key(RepositoryName repoName) {
- super(repoName);
- }
-
- @Override
- public SkyFunctionName functionName() {
- return SkyFunctions.REPO_FILE;
- }
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java
index 044ddf9..b3326be 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java
@@ -141,7 +141,6 @@
SkyFunctionName.createHermetic("RESOLVED_HASH_VALUES");
public static final SkyFunctionName MODULE_FILE =
SkyFunctionName.createNonHermetic("MODULE_FILE");
- public static final SkyFunctionName REPO_FILE = SkyFunctionName.createHermetic("REPO_FILE");
public static final SkyFunctionName BUILD_DRIVER =
SkyFunctionName.createNonHermetic("BUILD_DRIVER");
public static final SkyFunctionName BAZEL_MODULE_RESOLUTION =
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 12c22ca..fd2b03a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -668,10 +668,6 @@
pkgFactory,
directories,
bzlLoadFunctionForInliningPackageAndWorkspaceNodes));
- map.put(
- SkyFunctions.REPO_FILE,
- new RepoFileFunction(
- ruleClassProvider.getBazelStarlarkEnvironment(), directories.getWorkspace()));
map.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction(externalPackageHelper));
map.put(
BzlmodRepoRuleValue.BZLMOD_REPO_RULE,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
index 15b2cb6..dd4b5fd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -70,7 +70,6 @@
import com.google.devtools.build.lib.skyframe.PackageValue;
import com.google.devtools.build.lib.skyframe.PrecomputedFunction;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
-import com.google.devtools.build.lib.skyframe.RepoFileFunction;
import com.google.devtools.build.lib.skyframe.RepositoryMappingFunction;
import com.google.devtools.build.lib.skyframe.SkyFunctions;
import com.google.devtools.build.lib.skyframe.StarlarkBuiltinsFunction;
@@ -477,10 +476,6 @@
WorkspaceFileValue.WORKSPACE_FILE,
new WorkspaceFileFunction(
ruleClassProvider, pkgFactory, directories, /* bzlLoadFunctionForInlining= */ null))
- .put(
- SkyFunctions.REPO_FILE,
- new RepoFileFunction(
- ruleClassProvider.getBazelStarlarkEnvironment(), directories.getWorkspace()))
.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction(getExternalPackageHelper()))
.put(
BzlmodRepoRuleValue.BZLMOD_REPO_RULE,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
index 9ba1d39..2b42184 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD
@@ -39,6 +39,7 @@
"//src/main/java/com/google/devtools/build/lib/bazel/bzlmod:repo_rule_value",
"//src/main/java/com/google/devtools/build/lib/clock",
"//src/main/java/com/google/devtools/build/lib/cmdline",
+ "//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/concurrent",
"//src/main/java/com/google/devtools/build/lib/events",
"//src/main/java/com/google/devtools/build/lib/io:file_symlink_cycle_uniqueness_function",
@@ -55,7 +56,6 @@
"//src/main/java/com/google/devtools/build/lib/skyframe:package_value",
"//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_function",
"//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value",
- "//src/main/java/com/google/devtools/build/lib/skyframe:repo_file_function",
"//src/main/java/com/google/devtools/build/lib/skyframe:repository_mapping_function",
"//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions",
"//src/main/java/com/google/devtools/build/lib/skyframe:skyframe_cluster",
@@ -67,7 +67,6 @@
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/net/starlark/java/eval",
"//third_party:caffeine",
- "//third_party:error_prone_annotations",
"//third_party:guava",
"//third_party:jsr305",
],
diff --git a/src/main/protobuf/failure_details.proto b/src/main/protobuf/failure_details.proto
index ca793a2..37c922a 100644
--- a/src/main/protobuf/failure_details.proto
+++ b/src/main/protobuf/failure_details.proto
@@ -1245,7 +1245,6 @@
BUILTINS_INJECTION_FAILURE = 29 [(metadata) = { exit_code: 1 }];
SYMLINK_CYCLE_OR_INFINITE_EXPANSION = 30 [(metadata) = { exit_code: 1 }];
OTHER_IO_EXCEPTION = 31 [(metadata) = { exit_code: 36 }];
- BAD_REPO_FILE = 32 [(metadata) = { exit_code: 1 }];
}
Code code = 1;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RepoFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RepoFileFunctionTest.java
deleted file mode 100644
index a916551..0000000
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RepoFileFunctionTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright 2023 The Bazel Authors. 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.skyframe;
-
-import static com.google.common.truth.Truth.assertThat;
-import static com.google.devtools.build.lib.bazel.bzlmod.BzlmodTestUtil.createModuleKey;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.analysis.RuleContext;
-import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
-import com.google.devtools.build.lib.bazel.bzlmod.BazelLockFileFunction;
-import com.google.devtools.build.lib.bazel.bzlmod.BazelModuleResolutionFunction;
-import com.google.devtools.build.lib.bazel.bzlmod.FakeRegistry;
-import com.google.devtools.build.lib.bazel.bzlmod.ModuleFileFunction;
-import com.google.devtools.build.lib.bazel.bzlmod.YankedVersionsUtil;
-import com.google.devtools.build.lib.bazel.repository.RepositoryOptions.BazelCompatibilityMode;
-import com.google.devtools.build.lib.bazel.repository.RepositoryOptions.CheckDirectDepsMode;
-import com.google.devtools.build.lib.bazel.repository.RepositoryOptions.LockfileMode;
-import com.google.devtools.build.lib.packages.Type;
-import com.google.devtools.build.lib.skyframe.PrecomputedValue.Injected;
-import com.google.devtools.build.lib.vfs.Path;
-import java.io.IOException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-@RunWith(JUnit4.class)
-public class RepoFileFunctionTest extends BuildViewTestCase {
-
- private Path moduleRoot;
- private FakeRegistry registry;
-
- @Override
- protected ImmutableList<Injected> extraPrecomputedValues() {
- try {
- moduleRoot = scratch.dir("modules");
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- registry = FakeRegistry.DEFAULT_FACTORY.newFakeRegistry(moduleRoot.getPathString());
- return ImmutableList.of(
- PrecomputedValue.injected(
- ModuleFileFunction.REGISTRIES, ImmutableList.of(registry.getUrl())),
- PrecomputedValue.injected(ModuleFileFunction.IGNORE_DEV_DEPS, false),
- PrecomputedValue.injected(ModuleFileFunction.MODULE_OVERRIDES, ImmutableMap.of()),
- PrecomputedValue.injected(YankedVersionsUtil.ALLOWED_YANKED_VERSIONS, ImmutableList.of()),
- PrecomputedValue.injected(
- BazelModuleResolutionFunction.CHECK_DIRECT_DEPENDENCIES, CheckDirectDepsMode.WARNING),
- PrecomputedValue.injected(
- BazelModuleResolutionFunction.BAZEL_COMPATIBILITY_MODE, BazelCompatibilityMode.ERROR),
- PrecomputedValue.injected(BazelLockFileFunction.LOCKFILE_MODE, LockfileMode.UPDATE));
- }
-
- @Test
- public void repoFileInTheMainRepo() throws Exception {
- scratch.overwriteFile("REPO.bazel", "repo(default_deprecation='EVERYTHING IS DEPRECATED')");
- scratch.overwriteFile("abc/def/BUILD", "filegroup(name='what')");
- assertThat(
- getRuleContext(getConfiguredTarget("//abc/def:what"))
- .attributes()
- .get("deprecation", Type.STRING))
- .isEqualTo("EVERYTHING IS DEPRECATED");
- }
-
- @Test
- public void repoFileInAnExternalRepo() throws Exception {
- setBuildLanguageOptions("--enable_bzlmod");
- scratch.overwriteFile("MODULE.bazel", "bazel_dep(name='foo',version='1.0')");
- scratch.overwriteFile("abc/def/BUILD", "filegroup(name='what')");
- registry.addModule(createModuleKey("foo", "1.0"), "module(name='foo',version='1.0')");
- scratch.overwriteFile(moduleRoot.getRelative("foo~1.0/WORKSPACE.bazel").getPathString());
- scratch.overwriteFile(
- moduleRoot.getRelative("foo~1.0/REPO.bazel").getPathString(),
- "repo(default_deprecation='EVERYTHING IS DEPRECATED')");
- scratch.overwriteFile(
- moduleRoot.getRelative("foo~1.0/abc/def/BUILD").getPathString(), "filegroup(name='what')");
-
- assertThat(
- getRuleContext(getConfiguredTarget("//abc/def:what"))
- .attributes()
- .get("deprecation", Type.STRING))
- .isNull();
- assertThat(
- getRuleContext(getConfiguredTarget("@@foo~1.0//abc/def:what"))
- .attributes()
- .get("deprecation", Type.STRING))
- .isEqualTo("EVERYTHING IS DEPRECATED");
- }
-
- @Test
- public void cantCallRepoTwice() throws Exception {
- scratch.overwriteFile(
- "REPO.bazel",
- "repo(default_deprecation='EVERYTHING IS DEPRECATED')",
- "repo(features=['abc'])");
- scratch.overwriteFile("abc/def/BUILD", "filegroup(name='what')");
- reporter.removeHandler(failFastHandler);
- assertTargetError("//abc/def:what", "'repo' can only be called once");
- }
-
- @Test
- public void featureMerger() throws Exception {
- scratch.overwriteFile("REPO.bazel", "repo(features=['a', 'b', 'c', '-d'])");
- scratch.overwriteFile(
- "abc/def/BUILD",
- "package(features=['-a','-b','d'])",
- "filegroup(name='what', features=['b'])");
- RuleContext ruleContext = getRuleContext(getConfiguredTarget("//abc/def:what"));
- assertThat(ruleContext.getFeatures()).containsExactly("b", "c", "d");
- assertThat(ruleContext.getDisabledFeatures()).containsExactly("a");
- }
-}