Bzlmod: Add the workspace name to the main repo mapping

See GH issue for more info.

Fixes https://github.com/bazelbuild/bazel/issues/15657.

PiperOrigin-RevId: 454605374
Change-Id: I240a6f6e36893c1f977a34684fdc54621532bd02
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java
index 8700ce9..136a99f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunction.java
@@ -97,6 +97,12 @@
         return RepositoryMappingValue.withMapping(
             computeForBazelModuleRepo(repositoryName, bazelModuleResolutionValue)
                 .get()
+                // We need to map the workspace name to the main repo (without this, it would map to
+                // itself, which is a local_repository with path="." -- this is very problematic).
+                // See https://github.com/bazelbuild/bazel/issues/15657 for more info.
+                .withAdditionalMappings(
+                    ImmutableMap.of(
+                        externalPackageValue.getPackage().getWorkspaceName(), RepositoryName.MAIN))
                 .withAdditionalMappings(additionalMappings));
       }
 
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java
index 381eb64..c29258d 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RepositoryMappingFunctionTest.java
@@ -166,9 +166,14 @@
         .isEqualTo(
             withMappingForRootModule(
                 ImmutableMap.of(
-                    "", RepositoryName.create(""),
-                    "A", RepositoryName.create(""),
-                    "com_foo_bar_b", RepositoryName.create("@B.1.0")),
+                    "",
+                    RepositoryName.MAIN,
+                    "A",
+                    RepositoryName.MAIN,
+                    TestConstants.WORKSPACE_NAME,
+                    RepositoryName.MAIN,
+                    "com_foo_bar_b",
+                    RepositoryName.create("@B.1.0")),
                 name));
   }
 
@@ -248,10 +253,16 @@
         .isEqualTo(
             withMappingForRootModule(
                 ImmutableMap.of(
-                    "", RepositoryName.create(""),
-                    "A", RepositoryName.create(""),
-                    "B1", RepositoryName.create("@B.1.0"),
-                    "B2", RepositoryName.create("@B.2.0")),
+                    "",
+                    RepositoryName.MAIN,
+                    "A",
+                    RepositoryName.MAIN,
+                    TestConstants.WORKSPACE_NAME,
+                    RepositoryName.MAIN,
+                    "B1",
+                    RepositoryName.create("@B.1.0"),
+                    "B2",
+                    RepositoryName.create("@B.2.0")),
                 name));
   }
 
@@ -457,7 +468,7 @@
                     "", RepositoryName.MAIN,
                     "A", RepositoryName.MAIN,
                     "B", RepositoryName.create("@B.1.0"),
-                    "root", RepositoryName.create("root"),
+                    "root", RepositoryName.MAIN,
                     "ws_repo", RepositoryName.create("ws_repo")),
                 RepositoryName.MAIN));
   }