From f24479d495df540bae634b5ff2dde3177585c2a3 Mon Sep 17 00:00:00 2001 From: dannark Date: Thu, 21 Jun 2018 11:55:44 -0700 Subject: Take into account repository mapping when processing labels inside BUILD files within external repositories. For example: a/BUILD genrule( name = "a", srcs = ["@x//:x.txt"], outs = ["result.txt"], cmd = "echo hello > \$(location result.txt)" ) If the main workspace file references that repository with a rule: local_repository( name = "other_repo", path = "../a", repo_mapping = {"@x" : "@y"} ) Then when a/BUILD is evaluated, the string "@x//:x.txt" will be turned into a Label "@y//:x.txt" RELNOTES: None PiperOrigin-RevId: 201562148 --- .../devtools/build/lib/packages/BuildTypeTest.java | 61 ++++++++++++++++------ 1 file changed, 45 insertions(+), 16 deletions(-) (limited to 'src/test/java/com/google/devtools/build/lib/packages/BuildTypeTest.java') diff --git a/src/test/java/com/google/devtools/build/lib/packages/BuildTypeTest.java b/src/test/java/com/google/devtools/build/lib/packages/BuildTypeTest.java index 0321498994..eccc5a5a35 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/BuildTypeTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/BuildTypeTest.java @@ -23,7 +23,9 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; +import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.events.Location; +import com.google.devtools.build.lib.packages.BuildType.LabelConversionContext; import com.google.devtools.build.lib.packages.BuildType.Selector; import com.google.devtools.build.lib.syntax.EvalException; import com.google.devtools.build.lib.syntax.EvalUtils; @@ -47,10 +49,13 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class BuildTypeTest { private Label currentRule; + private LabelConversionContext labelConversionContext; @Before public final void setCurrentRule() throws Exception { this.currentRule = Label.parseAbsolute("//quux:baz"); + this.labelConversionContext = + new LabelConversionContext(currentRule, /* repositoryMapping= */ ImmutableMap.of()); } @Test @@ -64,8 +69,9 @@ public class BuildTypeTest { .put("d", "//d") .build(); - assertThat(BuildType.LABEL_DICT_UNARY.convert(input, null, null).keySet()) - .containsExactly("c", "b", "a", "f", "e", "d").inOrder(); + assertThat(BuildType.LABEL_DICT_UNARY.convert(input, null, labelConversionContext).keySet()) + .containsExactly("c", "b", "a", "f", "e", "d") + .inOrder(); } @Test @@ -284,6 +290,17 @@ public class BuildTypeTest { entry1Label, entry2Label); } + @Test + public void testLabelWithRemapping() throws Exception { + LabelConversionContext context = + new LabelConversionContext( + currentRule, + ImmutableMap.of( + RepositoryName.create("@orig_repo"), RepositoryName.create("@new_repo"))); + Label label = BuildType.LABEL.convert("@orig_repo//foo:bar", null, context); + assertThat(label).isEquivalentAccordingToCompareTo(Label.parseAbsolute("@new_repo//foo:bar")); + } + /** * Tests basic {@link Selector} functionality. */ @@ -293,7 +310,7 @@ public class BuildTypeTest { "//conditions:a", "//a:a", "//conditions:b", "//b:b", Selector.DEFAULT_CONDITION_KEY, "//d:d"); - Selector