Fix builds with indirect dependency on //external with --experimental_sibling_repository_layout
Added regression tests as well.
Closes #10816.
PiperOrigin-RevId: 295877636
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
index 5a52959..65c2aa4 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/SymlinkForest.java
@@ -332,8 +332,10 @@
for (Map.Entry<PackageIdentifier, Root> entry : packageRoots.entrySet()) {
PackageIdentifier pkgId = entry.getKey();
- if (!siblingRepositoryLayout && pkgId.equals(LabelConstants.EXTERNAL_PACKAGE_IDENTIFIER)) {
- // This isn't a "real" package, don't add it to the symlink tree.
+ if (pkgId.equals(LabelConstants.EXTERNAL_PACKAGE_IDENTIFIER)) {
+ // //external is a virtual package regardless , don't add it to the symlink tree.
+ // Subpackages of
+ // external, like //external/foo, are fine though.
continue;
}
RepositoryName repository = pkgId.getRepository();
diff --git a/src/test/shell/bazel/execroot_test.sh b/src/test/shell/bazel/execroot_test.sh
index f4ad5fc..f0b842c 100755
--- a/src/test/shell/bazel/execroot_test.sh
+++ b/src/test/shell/bazel/execroot_test.sh
@@ -68,6 +68,56 @@
test ! -e "$execroot/external/bazel_tools/tools/genrule/genrule-setup.sh"
}
+# Regression test for b/149771751
+function test_sibling_repository_layout_indirect_dependency() {
+ touch WORKSPACE
+
+ mkdir external
+ mkdir -p foo
+ cat > BUILD <<'EOF'
+package(default_visibility = ["//visibility:public"])
+
+filegroup(
+ name = "srcs",
+ srcs = ["BUILD"],
+)
+EOF
+ cat > foo/BUILD <<'EOF'
+# cc_library depends on //external:cc_toolchain
+cc_library(
+ name = "srcs",
+ data = ["//:srcs"], # load from root package to trigger symlinking planting of the top level external dir
+)
+EOF
+
+ bazel build --experimental_sibling_repository_layout //foo:srcs || fail "expected success"
+}
+
+# Regression test for b/149771751
+function test_subdirectory_repository_layout_indirect_dependency() {
+ touch WORKSPACE
+
+ mkdir external
+ mkdir -p foo
+ cat > BUILD <<'EOF'
+package(default_visibility = ["//visibility:public"])
+
+filegroup(
+ name = "srcs",
+ srcs = ["BUILD"],
+)
+EOF
+ cat > foo/BUILD <<'EOF'
+# cc_library depends on //external:cc_toolchain
+cc_library(
+ name = "srcs",
+ data = ["//:srcs"], # load from root package to trigger symlinking planting of the top level external dir
+)
+EOF
+
+ bazel build --noexperimental_sibling_repository_layout //foo:srcs || fail "expected success"
+}
+
function test_no_sibling_repository_layout() {
touch WORKSPACE