Automated rollback of commit 5de967bb27ebdfd31bfa193dc2698cbe46600815.
*** Reason for rollback ***
Temporarily rolling back until #14852 is fixed.
*** Original change description ***
Use the proper main repo mapping where appropriate
Use the main repo mapping (instead of ALWAYS_FALLBACK) to a) process .bzl load labels in the WORKSPACE file, and b) to process any labels passed to repo rules in either the WORKSPACE file or WORKSPACE-loaded macros.
This change only has a noticeable effect for when the workspace name (specified using the `workspace` directive in the WORKSPACE file) is used in labels as `@workspace_name//
***
PiperOrigin-RevId: 454899732
Change-Id: Ief9b90f981d3fdb551c53e56e9ffcfdfb9f61bd4
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 90d8fa1..77e85f3 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -316,7 +316,16 @@
throw new UnsupportedOperationException("Can only access the external package repository"
+ "mappings from the //external package");
}
- return externalPackageRepositoryMappings.getOrDefault(repository, ImmutableMap.of());
+
+ // We are passed a repository name as seen from the main repository, not necessarily
+ // a canonical repository name. So, we first have to find the canonical name for the
+ // repository in question before we can look up the mapping for it.
+ RepositoryName actualRepositoryName =
+ externalPackageRepositoryMappings
+ .getOrDefault(RepositoryName.MAIN, ImmutableMap.of())
+ .getOrDefault(repository.getName(), repository);
+
+ return externalPackageRepositoryMappings.getOrDefault(actualRepositoryName, ImmutableMap.of());
}
/** Get the repository mapping for this package. */
@@ -864,14 +873,13 @@
PackageSettings helper,
RootedPath workspacePath,
String workspaceName,
- RepositoryMapping mainRepoMapping,
StarlarkSemantics starlarkSemantics) {
return new Builder(
helper,
LabelConstants.EXTERNAL_PACKAGE_IDENTIFIER,
workspaceName,
starlarkSemantics.getBool(BuildLanguageOptions.INCOMPATIBLE_NO_IMPLICIT_FILE_EXPORT),
- mainRepoMapping)
+ RepositoryMapping.ALWAYS_FALLBACK)
.setFilename(workspacePath);
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index 074eca3..713f5b1 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -444,12 +444,9 @@
}
public Package.Builder newExternalPackageBuilder(
- RootedPath workspacePath,
- String workspaceName,
- RepositoryMapping mainRepoMapping,
- StarlarkSemantics starlarkSemantics) {
+ RootedPath workspacePath, String workspaceName, StarlarkSemantics starlarkSemantics) {
return Package.newExternalPackageBuilder(
- packageSettings, workspacePath, workspaceName, mainRepoMapping, starlarkSemantics);
+ packageSettings, workspacePath, workspaceName, starlarkSemantics);
}
// This function is public only for the benefit of skyframe.PackageFunction,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
index 09f8678..3ea17ab 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunction.java
@@ -30,7 +30,6 @@
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.Postable;
import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException;
@@ -239,33 +238,9 @@
// -- start of historical WorkspaceFileFunction --
// TODO(adonovan): reorganize and simplify.
- // Get the state at the end of the previous chunk.
- WorkspaceFileValue prevValue = null;
- if (key.getIndex() > 0) {
- prevValue =
- (WorkspaceFileValue)
- env.getValue(WorkspaceFileValue.key(workspaceFile, key.getIndex() - 1));
- if (prevValue == null) {
- return null;
- }
- if (prevValue.next() == null) {
- return prevValue;
- }
- }
- RepositoryMapping repoMapping;
- if (prevValue == null) {
- repoMapping = RepositoryMapping.ALWAYS_FALLBACK;
- } else {
- repoMapping =
- RepositoryMapping.createAllowingFallback(
- prevValue
- .getRepositoryMapping()
- .getOrDefault(RepositoryName.MAIN, ImmutableMap.of()));
- }
-
Package.Builder builder =
packageFactory.newExternalPackageBuilder(
- workspaceFile, ruleClassProvider.getRunfilesPrefix(), repoMapping, starlarkSemantics);
+ workspaceFile, ruleClassProvider.getRunfilesPrefix(), starlarkSemantics);
if (chunks.isEmpty()) {
return new WorkspaceFileValue(
@@ -279,13 +254,28 @@
ImmutableMap.of());
}
+ // Get the state at the end of the previous chunk.
+ WorkspaceFileValue prevValue = null;
+ if (key.getIndex() > 0) {
+ prevValue =
+ (WorkspaceFileValue)
+ env.getValue(WorkspaceFileValue.key(workspaceFile, key.getIndex() - 1));
+ if (prevValue == null) {
+ return null;
+ }
+ if (prevValue.next() == null) {
+ return prevValue;
+ }
+ }
+
List<StarlarkFile> chunk = chunks.get(key.getIndex());
// Parse the labels in the chunk's load statements.
ImmutableList<Pair<String, Location>> programLoads =
BzlLoadFunction.getLoadsFromStarlarkFiles(chunk);
ImmutableList<Label> loadLabels =
- BzlLoadFunction.getLoadLabels(env.getListener(), programLoads, rootPackage, repoMapping);
+ BzlLoadFunction.getLoadLabels(
+ env.getListener(), programLoads, rootPackage, RepositoryMapping.ALWAYS_FALLBACK);
if (loadLabels == null) {
NoSuchPackageException e =
PackageFunction.PackageFunctionException.builder()
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD
index 247b531..ac60a64 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD
@@ -22,7 +22,6 @@
"//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories",
"//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader",
"//src/main/java/com/google/devtools/build/lib/bazel/repository/starlark",
- "//src/main/java/com/google/devtools/build/lib/cmdline:cmdline-primitives",
"//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/packages/semantics",
@@ -69,7 +68,6 @@
"//src/main/java/com/google/devtools/build/lib/analysis:blaze_directories",
"//src/main/java/com/google/devtools/build/lib/bazel/repository/downloader",
"//src/main/java/com/google/devtools/build/lib/bazel/repository/starlark",
- "//src/main/java/com/google/devtools/build/lib/cmdline:cmdline-primitives",
"//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/packages/semantics",
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContextTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContextTest.java
index 219ef73..73c22c9 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContextTest.java
@@ -26,7 +26,6 @@
import com.google.common.collect.ImmutableSortedMap;
import com.google.common.io.CharStreams;
import com.google.devtools.build.lib.bazel.repository.downloader.DownloadManager;
-import com.google.devtools.build.lib.cmdline.RepositoryMapping;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.Package;
@@ -140,7 +139,6 @@
DefaultPackageSettings.INSTANCE,
RootedPath.toRootedPath(root, workspaceFile),
"runfiles",
- RepositoryMapping.ALWAYS_FALLBACK,
starlarkSemantics);
ExtendedEventHandler listener = Mockito.mock(ExtendedEventHandler.class);
Rule rule =
diff --git a/src/test/java/com/google/devtools/build/lib/packages/BUILD b/src/test/java/com/google/devtools/build/lib/packages/BUILD
index 5958cb7..a154539 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/packages/BUILD
@@ -20,7 +20,6 @@
name = "PackageTestsUtil",
srcs = ["WorkspaceFactoryTestHelper.java"],
deps = [
- "//src/main/java/com/google/devtools/build/lib/cmdline:cmdline-primitives",
"//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/vfs",
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java
index 71957a7..df85e78 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java
@@ -123,10 +123,7 @@
Path myPkgPath = scratch.resolve("/workspace/WORKSPACE");
Package.Builder pkgBuilder =
packageFactory.newExternalPackageBuilder(
- RootedPath.toRootedPath(root, myPkgPath),
- "TESTING",
- RepositoryMapping.ALWAYS_FALLBACK,
- StarlarkSemantics.DEFAULT);
+ RootedPath.toRootedPath(root, myPkgPath), "TESTING", StarlarkSemantics.DEFAULT);
Map<String, Object> attributeValues = new HashMap<>();
attributeValues.put("name", "foo");
diff --git a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
index 1ed39ed..31d98d0 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/WorkspaceFactoryTestHelper.java
@@ -20,7 +20,6 @@
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-import com.google.devtools.build.lib.cmdline.RepositoryMapping;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.packages.Package.Builder.DefaultPackageSettings;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
@@ -36,7 +35,6 @@
/** Parses a WORKSPACE file with the given content. */
// TODO(adonovan): delete this junk class.
final class WorkspaceFactoryTestHelper {
-
private final Root root;
private Package.Builder builder;
private StarlarkSemantics starlarkSemantics;
@@ -69,7 +67,6 @@
DefaultPackageSettings.INSTANCE,
RootedPath.toRootedPath(root, workspaceFilePath),
"",
- RepositoryMapping.ALWAYS_FALLBACK,
StarlarkSemantics.DEFAULT);
WorkspaceFactory factory =
new WorkspaceFactory(