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