Fix display form for labels with invisible repos

So that they don't accidentally show up as valid labels.

PiperOrigin-RevId: 551277187
Change-Id: Ia10def32819d77393d388cb9004576e7941fbd92
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
index 5b564ee..995e942 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/RepositoryName.java
@@ -251,6 +251,9 @@
   public String getDisplayForm(RepositoryMapping mainRepositoryMapping) {
     Preconditions.checkArgument(
         mainRepositoryMapping.ownerRepo() == null || mainRepositoryMapping.ownerRepo().isMain());
+    if (!isVisible()) {
+      return '@' + getNameWithAt();
+    }
     if (isMain()) {
       // Packages in the main repository can always use repo-relative form.
       return "";
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java
index 5926563..5e0a4cb 100644
--- a/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java
+++ b/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java
@@ -405,7 +405,8 @@
   public void testDisplayForm() throws Exception {
     RepositoryName canonicalName = RepositoryName.create("canonical");
     RepositoryMapping repositoryMapping =
-        RepositoryMapping.create(ImmutableMap.of("local", canonicalName), RepositoryName.MAIN);
+        RepositoryMapping.create(
+            ImmutableMap.of("", RepositoryName.MAIN, "local", canonicalName), RepositoryName.MAIN);
 
     assertThat(displayFormFor("//foo/bar:bar", repositoryMapping)).isEqualTo("//foo/bar:bar");
     assertThat(displayFormFor("//foo/bar:baz", repositoryMapping)).isEqualTo("//foo/bar:baz");
@@ -423,6 +424,12 @@
     assertThat(displayFormFor("@other//:other", repositoryMapping)).isEqualTo("@@other//:other");
     assertThat(displayFormFor("@@other", repositoryMapping)).isEqualTo("@@other//:other");
 
+    assertThat(
+            Label.parseWithRepoContext(
+                    "@bad//abc", RepoContext.of(RepositoryName.MAIN, repositoryMapping))
+                .getDisplayForm(repositoryMapping))
+        .isEqualTo("@@[unknown repo 'bad' requested from @]//abc:abc");
+
     assertThat(displayFormFor("@unremapped//:unremapped", RepositoryMapping.ALWAYS_FALLBACK))
         .isEqualTo("@unremapped//:unremapped");
     assertThat(displayFormFor("@unremapped", RepositoryMapping.ALWAYS_FALLBACK))
@@ -438,7 +445,8 @@
   public void testShorthandDisplayForm() throws Exception {
     RepositoryName canonicalName = RepositoryName.create("canonical");
     RepositoryMapping repositoryMapping =
-        RepositoryMapping.create(ImmutableMap.of("local", canonicalName), RepositoryName.MAIN);
+        RepositoryMapping.create(
+            ImmutableMap.of("", RepositoryName.MAIN, "local", canonicalName), RepositoryName.MAIN);
 
     assertThat(shorthandDisplayFormFor("//foo/bar:bar", repositoryMapping)).isEqualTo("//foo/bar");
     assertThat(shorthandDisplayFormFor("//foo/bar:baz", repositoryMapping))
@@ -461,6 +469,12 @@
     assertThat(shorthandDisplayFormFor("@@other", repositoryMapping)).isEqualTo("@@other");
 
     assertThat(
+            Label.parseWithRepoContext(
+                    "@bad//abc", RepoContext.of(RepositoryName.MAIN, repositoryMapping))
+                .getShorthandDisplayForm(repositoryMapping))
+        .isEqualTo("@@[unknown repo 'bad' requested from @]//abc");
+
+    assertThat(
             shorthandDisplayFormFor("@unremapped//:unremapped", RepositoryMapping.ALWAYS_FALLBACK))
         .isEqualTo("@unremapped");
     assertThat(shorthandDisplayFormFor("@unremapped", RepositoryMapping.ALWAYS_FALLBACK))
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/RepositoryNameTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/RepositoryNameTest.java
index c55abcb..c9d4528 100644
--- a/src/test/java/com/google/devtools/build/lib/cmdline/RepositoryNameTest.java
+++ b/src/test/java/com/google/devtools/build/lib/cmdline/RepositoryNameTest.java
@@ -93,5 +93,16 @@
         .isEqualTo("@local");
     assertThat(RepositoryName.create("other").getDisplayForm(repositoryMapping))
         .isEqualTo("@@other");
+
+    assertThat(
+            RepositoryName.create("")
+                .toNonVisible(RepositoryName.create("owner"))
+                .getDisplayForm(repositoryMapping))
+        .isEqualTo("@@[unknown repo '' requested from @owner]");
+    assertThat(
+            RepositoryName.create("local")
+                .toNonVisible(RepositoryName.create("owner"))
+                .getDisplayForm(repositoryMapping))
+        .isEqualTo("@@[unknown repo 'local' requested from @owner]");
   }
 }