diff options
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(); + } } |