Merge "Now we check that distribution URL in wrapper file comes from gradle.org." into studio-1.0-release
diff --git a/android/src/com/android/tools/idea/gradle/util/GradleUtil.java b/android/src/com/android/tools/idea/gradle/util/GradleUtil.java
index 50be66b..3671add 100644
--- a/android/src/com/android/tools/idea/gradle/util/GradleUtil.java
+++ b/android/src/com/android/tools/idea/gradle/util/GradleUtil.java
@@ -835,7 +835,9 @@
if (wrapperPropertiesFile != null) {
String gradleVersion = null;
try {
- gradleVersion = getGradleWrapperVersion(wrapperPropertiesFile);
+ Properties properties = PropertiesUtil.getProperties(wrapperPropertiesFile);
+ String url = properties.getProperty(DISTRIBUTION_URL_PROPERTY);
+ gradleVersion = getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
}
catch (IOException e) {
LOG.warn("Failed to read file " + wrapperPropertiesFile.getPath());
@@ -857,6 +859,31 @@
}
}
+ @VisibleForTesting
+ @Nullable
+ static String getGradleWrapperVersionOnlyIfComingForGradleDotOrg(@Nullable String url) {
+ if (url != null) {
+ int foundIndex = url.indexOf("://");
+ if (foundIndex != -1) {
+ String protocol = url.substring(0, foundIndex);
+ if (protocol.equals("http") || protocol.equals("https")) {
+ String expectedPrefix = protocol + "://services.gradle.org/distributions/gradle-";
+ if (url.startsWith(expectedPrefix)) {
+ // look for "-" before "bin" or "all"
+ foundIndex = url.indexOf('-', expectedPrefix.length());
+ if (foundIndex != -1) {
+ String version = url.substring(expectedPrefix.length(), foundIndex);
+ if (StringUtil.isNotEmpty(version)) {
+ return version;
+ }
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
+
// Currently, the latest Gradle version is 2.2.1, and we consider 2.2 and 2.2.1 as compatible.
private static boolean isCompatibleWithEmbeddedGradleVersion(@NotNull String gradleVersion) {
return gradleVersion.equals(SdkConstants.GRADLE_MINIMUM_VERSION) || gradleVersion.equals(GRADLE_LATEST_VERSION);
diff --git a/android/testSrc/com/android/tools/idea/gradle/util/GradleUtilTest.java b/android/testSrc/com/android/tools/idea/gradle/util/GradleUtilTest.java
index cf81874..83afe05 100644
--- a/android/testSrc/com/android/tools/idea/gradle/util/GradleUtilTest.java
+++ b/android/testSrc/com/android/tools/idea/gradle/util/GradleUtilTest.java
@@ -223,4 +223,60 @@
String initScript = FileUtil.loadFile(initScriptPath);
assertEquals(expectedScript, initScript);
}
+
+ public void testGetGradleWrapperVersionWithUrl() {
+ // Tries both http and https, bin and all. Also versions 2.2.1, 2.2 and 1.12
+ String url = "https://services.gradle.org/distributions/gradle-2.2.1-all.zip";
+ String version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("2.2.1", version);
+
+ url = "https://services.gradle.org/distributions/gradle-2.2.1-bin.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("2.2.1", version);
+
+ url = "http://services.gradle.org/distributions/gradle-2.2.1-all.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("2.2.1", version);
+
+ url = "http://services.gradle.org/distributions/gradle-2.2.1-bin.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("2.2.1", version);
+
+ url = "https://services.gradle.org/distributions/gradle-2.2-all.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("2.2", version);
+
+ url = "https://services.gradle.org/distributions/gradle-2.2-bin.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("2.2", version);
+
+ url = "http://services.gradle.org/distributions/gradle-2.2-all.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("2.2", version);
+
+ url = "http://services.gradle.org/distributions/gradle-2.2-bin.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("2.2", version);
+
+ url = "https://services.gradle.org/distributions/gradle-1.12-all.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("1.12", version);
+
+ url = "https://services.gradle.org/distributions/gradle-1.12-bin.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("1.12", version);
+
+ url = "http://services.gradle.org/distributions/gradle-1.12-all.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("1.12", version);
+
+ url = "http://services.gradle.org/distributions/gradle-1.12-bin.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertEquals("1.12", version);
+
+ // Use custom URL.
+ url = "http://myown.com/gradle-2.2.1-bin.zip";
+ version = GradleUtil.getGradleWrapperVersionOnlyIfComingForGradleDotOrg(url);
+ assertNull(version);
+ }
}