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]"); } }