diff options
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java | 6 | ||||
-rwxr-xr-x | src/test/shell/bazel/local_repository_test.sh | 38 |
2 files changed, 41 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java index 9365e9a7f3..931bcf9d96 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java +++ b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java @@ -30,6 +30,7 @@ import javax.annotation.Nullable; public abstract class AbstractAttributeMapper implements AttributeMap { private static final PathFragment VISIBILITY = new PathFragment("visibility"); + private static final PathFragment EXTERNAL = new PathFragment("external"); private final Package pkg; private final RuleClass ruleClass; @@ -164,8 +165,9 @@ public abstract class AbstractAttributeMapper implements AttributeMap { // generally tools, which go to the main repository. absoluteLabel = label; } else if (label.getPackageIdentifier().getRepository().isDefault() - && VISIBILITY.equals(label.getPackageIdentifier().getPackageFragment())) { - // //visibility: labels must also be special-cased :( + && (VISIBILITY.equals(label.getPackageIdentifier().getPackageFragment()) + || EXTERNAL.equals(label.getPackageIdentifier().getPackageFragment()))) { + // //visibility: and //external: labels must also be special-cased :( absoluteLabel = label; } else { absoluteLabel = ruleLabel.resolveRepositoryRelative(label); diff --git a/src/test/shell/bazel/local_repository_test.sh b/src/test/shell/bazel/local_repository_test.sh index ff6d38706b..e3f146044d 100755 --- a/src/test/shell/bazel/local_repository_test.sh +++ b/src/test/shell/bazel/local_repository_test.sh @@ -481,7 +481,7 @@ EOF assert_contains "Michaelangelo" bazel-genfiles/external/mutant/tmnt } -function test_local_deps() { +function test_external_deps_in_remote_repo() { local r=$TEST_TMPDIR/r rm -fr $r mkdir -p $r @@ -491,6 +491,42 @@ local_repository( path = "$r", ) +bind( + name = "e", + actual = "@r//:g", +) +EOF + + cat > $r/BUILD <<EOF +genrule( + name = "r", + srcs = ["//external:e"], + outs = ["r.out"], + cmd = "cp \$< \$@", +) + +genrule( + name = "g", + srcs = [], + outs = ["g.out"], + cmd = "echo GOLF > \$@", + visibility = ["//visibility:public"], +) +EOF + + bazel build @r//:r || fail "build failed" + assert_contains "GOLF" bazel-genfiles/external/r/r.out +} + +function test_local_deps() { + local r=$TEST_TMPDIR/r + rm -fr $r + mkdir -p $r + cat > WORKSPACE <<EOF +local_repository( + name = "r", + path = "$r", +) EOF mkdir -p $r/a |