aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Yun Peng <pcloudy@google.com>2017-02-01 14:23:43 +0000
committerGravatar Yun Peng <pcloudy@google.com>2017-02-01 14:31:31 +0000
commit932d1abfa34267a9e5abc7441c9e2a081beedd85 (patch)
treed9e21e197b0a7f66f2a804cb3e066e45ddcb044e /src/main/java/com/google/devtools/build
parent4ca5dfa0a66e9baf6c3953830fc53e6da27b9f42 (diff)
*** 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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidSdkRepositoryFunction.java112
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_sdk_repository_template.txt10
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/*&#47;*&#47;*, 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/**"]))