diff options
author | 2017-02-01 14:23:43 +0000 | |
---|---|---|
committer | 2017-02-01 14:31:31 +0000 | |
commit | 932d1abfa34267a9e5abc7441c9e2a081beedd85 (patch) | |
tree | d9e21e197b0a7f66f2a804cb3e066e45ddcb044e /src/main/java/com/google/devtools/build | |
parent | 4ca5dfa0a66e9baf6c3953830fc53e6da27b9f42 (diff) |
Rollback of commit 06072c557290b97cb2d2e4fd255b647a9208cb5c.
*** Reason for rollback ***
Broke andriod_sdk_repository on ci.bazel.io
See https://github.com/bazelbuild/bazel/issues/2465
*** Original change description ***
Make android_sdk_repository discover all system-images directories in the sdk.
This will be used by the upcoming android_device rule that launches emulators.
--
PiperOrigin-RevId: 146235800
MOS_MIGRATED_REVID=146235800
Diffstat (limited to 'src/main/java/com/google/devtools/build')
2 files changed, 8 insertions, 114 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 2ce8b4c332..179f5b51a4 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 @@ -14,14 +14,10 @@ package com.google.devtools.build.lib.bazel.rules.android; import com.android.repository.Revision; -import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; -import com.google.common.collect.Maps.EntryTransformer; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.packages.Rule; @@ -45,8 +41,6 @@ import com.google.devtools.build.skyframe.SkyFunction.Environment; import com.google.devtools.build.skyframe.SkyFunctionException; import com.google.devtools.build.skyframe.SkyFunctionException.Transience; import com.google.devtools.build.skyframe.SkyKey; -import com.google.devtools.build.skyframe.SkyValue; -import com.google.devtools.build.skyframe.ValueOrException; import java.io.IOException; import java.util.Map; import java.util.Properties; @@ -58,9 +52,8 @@ import javax.annotation.Nullable; * Implementation of the {@code android_sdk_repository} rule. */ public class AndroidSdkRepositoryFunction extends RepositoryFunction { - private static final PathFragment BUILD_TOOLS_DIR = new PathFragment("build-tools"); - private static final PathFragment PLATFORMS_DIR = new PathFragment("platforms"); - private static final PathFragment SYSTEM_IMAGES_DIR = new PathFragment("system-images"); + private static final String BUILD_TOOLS_DIR_NAME = "build-tools"; + private static final String PLATFORMS_DIR_NAME = "platforms"; private static final Pattern PLATFORMS_API_LEVEL_PATTERN = Pattern.compile("android-(\\d+)"); private static final Revision MIN_BUILD_TOOLS_REVISION = new Revision(24, 0, 3); private static final String PATH_ENV_VAR = "ANDROID_HOME"; @@ -98,7 +91,7 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { } DirectoryListingValue platformsDirectoryValue = - getDirectoryListing(androidSdkPath, PLATFORMS_DIR, env); + getDirectoryListing(fs, androidSdkPath.getChild(PLATFORMS_DIR_NAME), env); if (platformsDirectoryValue == null) { return null; } @@ -138,7 +131,7 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { // If the build_tools_version attribute is not explicitly set, we select the highest version // installed in the SDK. DirectoryListingValue directoryValue = - getDirectoryListing(androidSdkPath, BUILD_TOOLS_DIR, env); + getDirectoryListing(fs, androidSdkPath.getChild(BUILD_TOOLS_DIR_NAME), env); if (directoryValue == null) { return null; } @@ -171,17 +164,6 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { throw new RepositoryFunctionException(e, Transience.PERSISTENT); } - ImmutableSortedSet<PathFragment> androidDeviceSystemImageDirs = - getAndroidDeviceSystemImageDirs(androidSdkPath, env); - if (androidDeviceSystemImageDirs == null) { - return null; - } - - StringBuilder systemImageDirsList = new StringBuilder(); - for (PathFragment systemImageDir : androidDeviceSystemImageDirs) { - systemImageDirsList.append(String.format(" \"%s\",\n", systemImageDir)); - } - String template = getStringResource("android_sdk_repository_template.txt"); String buildFile = template @@ -189,8 +171,7 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { .replace("%build_tools_version%", buildToolsVersion) .replace("%build_tools_directory%", buildToolsDirectory) .replace("%api_levels%", Iterables.toString(apiLevels)) - .replace("%default_api_level%", defaultApiLevel) - .replace("%system_image_dirs%", systemImageDirsList); + .replace("%default_api_level%", defaultApiLevel); // All local maven repositories that are shipped in the Android SDK. // TODO(ajmichael): Create SkyKeys so that if the SDK changes, this function will get rerun. @@ -237,12 +218,12 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { /** Gets a DirectoryListingValue for {@code dirPath} or returns null. */ private static DirectoryListingValue getDirectoryListing( - Path root, PathFragment dirPath, Environment env) + FileSystem fs, Path dirPath, Environment env) throws RepositoryFunctionException, InterruptedException { try { return (DirectoryListingValue) env.getValueOrThrow( - DirectoryListingValue.key(RootedPath.toRootedPath(root, dirPath)), + DirectoryListingValue.key(RootedPath.toRootedPath(fs.getRootDirectory(), dirPath)), InconsistentFilesystemException.class); } catch (InconsistentFilesystemException e) { throw new RepositoryFunctionException(new IOException(e), Transience.PERSISTENT); @@ -352,83 +333,4 @@ public class AndroidSdkRepositoryFunction extends RepositoryFunction { e); } } - - /** - * Gets PathFragments for /sdk/system-images/*/*/*, which are the directories in the - * SDK that contain system images needed for android_device. - */ - private static ImmutableSortedSet<PathFragment> getAndroidDeviceSystemImageDirs( - Path androidSdkPath, Environment env) - throws RepositoryFunctionException, InterruptedException { - DirectoryListingValue systemImagesDirectoryValue = - getDirectoryListing(androidSdkPath, SYSTEM_IMAGES_DIR, env); - if (systemImagesDirectoryValue == null) { - return null; - } - ImmutableMap<PathFragment, DirectoryListingValue> apiLevelSystemImageDirs = - getSubdirectoryListingValues( - androidSdkPath, SYSTEM_IMAGES_DIR, systemImagesDirectoryValue, env); - if (apiLevelSystemImageDirs == null) { - return null; - } - - ImmutableSortedSet.Builder<PathFragment> pathFragments = ImmutableSortedSet.naturalOrder(); - for (PathFragment apiLevelDir : apiLevelSystemImageDirs.keySet()) { - ImmutableMap<PathFragment, DirectoryListingValue> apiTypeSystemImageDirs = - getSubdirectoryListingValues( - androidSdkPath, apiLevelDir, apiLevelSystemImageDirs.get(apiLevelDir), env); - if (apiTypeSystemImageDirs == null) { - return null; - } - for (PathFragment apiTypeDir : apiTypeSystemImageDirs.keySet()) { - for (Dirent architectureSystemImageDir : - apiTypeSystemImageDirs.get(apiTypeDir).getDirents()) { - pathFragments.add(apiTypeDir.getRelative(architectureSystemImageDir.getName())); - } - } - } - return pathFragments.build(); - } - - /** Gets DirectoryListingValues for subdirectories of the directory or returns null. */ - 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(), - new Function<Dirent, PathFragment>() { - @Override - public PathFragment apply(Dirent input) { - return path.getRelative(input.getName()); - } - }), - new EntryTransformer<PathFragment, Dirent, SkyKey>() { - @Override - public SkyKey transformEntry(PathFragment key, Dirent value) { - return DirectoryListingValue.key( - RootedPath.toRootedPath(root, root.getRelative(key))); - } - }); - - Map<SkyKey, ValueOrException<InconsistentFilesystemException>> values = - env.getValuesOrThrow( - skyKeysForSubdirectoryLookups.values(), InconsistentFilesystemException.class); - - ImmutableMap.Builder<PathFragment, DirectoryListingValue> directoryListingValues = - new ImmutableMap.Builder<>(); - for (PathFragment pathFragment : skyKeysForSubdirectoryLookups.keySet()) { - try { - SkyValue skyValue = values.get(skyKeysForSubdirectoryLookups.get(pathFragment)).get(); - if (skyValue == null) { - return null; - } - directoryListingValues.put(pathFragment, (DirectoryListingValue) skyValue); - } catch (InconsistentFilesystemException e) { - throw new RepositoryFunctionException(new IOException(e), Transience.PERSISTENT); - } - } - return directoryListingValues.build(); - } } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt index 33a251062a..41cc7cb9d2 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt @@ -1,9 +1,6 @@ package(default_visibility = ["//visibility:public"]) -load( - "@bazel_tools//tools/android:android_sdk_repository_template.bzl", - "create_android_device_rules", - "create_android_sdk_rules") +load("@bazel_tools//tools/android:android_sdk_repository_template.bzl", "create_android_sdk_rules") create_android_sdk_rules( name = "%repository_name%", @@ -43,10 +40,5 @@ alias( actual = "tools/lib/emulator/snapshots.img", ) -create_android_device_rules( - system_image_dirs = [ -%system_image_dirs% ], -) - exports_files([ %exported_files%] + glob(["system-images/**"])) |