aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java15
-rw-r--r--src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java17
2 files changed, 30 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
index 598784a368..0c98f90ab5 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java
@@ -391,14 +391,25 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction {
return pathFragments.build();
}
- /** Gets DirectoryListingValues for subdirectories of the directory or returns null. */
+ /**
+ * Gets DirectoryListingValues for subdirectories of the directory or returns null.
+ *
+ * Ignores all non-directory files.
+ */
private static ImmutableMap<PathFragment, DirectoryListingValue> getSubdirectoryListingValues(
final Path root, final PathFragment path, DirectoryListingValue directory, Environment env)
throws RepositoryFunctionException, InterruptedException {
Map<PathFragment, SkyKey> skyKeysForSubdirectoryLookups =
Maps.transformEntries(
Maps.uniqueIndex(
- directory.getDirents(),
+ Iterables.filter(
+ directory.getDirents(),
+ new Predicate<Dirent>() {
+ @Override
+ public boolean apply(Dirent dirent) {
+ return dirent.getType().equals(Dirent.Type.DIRECTORY);
+ }
+ }),
new Function<Dirent, PathFragment>() {
@Override
public PathFragment apply(Dirent input) {
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
index a6aa5b907e..fd64a4a8ca 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryTest.java
@@ -238,4 +238,21 @@ public class AndroidSdkRepositoryTest extends BuildViewTestCase {
+ "or install api level 25 from the Android SDK Manager.");
}
}
+
+ // Regression test for https://github.com/bazelbuild/bazel/issues/2739.
+ @Test
+ public void testFilesInSystemImagesDirectories() throws Exception {
+ scratchPlatformsDirectories(24);
+ scratchBuildToolsDirectories("25.0.1");
+ scratch.file("/sdk/system-images/.DS_Store");
+ FileSystemUtils.appendIsoLatin1(scratch.resolve("WORKSPACE"),
+ "local_repository(name = 'bazel_tools', path = '/bazel_tools_workspace')",
+ "android_sdk_repository(",
+ " name = 'androidsdk',",
+ " path = '/sdk',",
+ ")");
+ invalidatePackages();
+
+ assertThat(getConfiguredTarget("@androidsdk//:sdk")).isNotNull();
+ }
}