aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java6
-rwxr-xr-xsrc/test/shell/bazel/local_repository_test.sh38
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