diff --git a/src/main/groovy/com/jakewharton/sdkmanager/internal/PackageResolver.groovy b/src/main/groovy/com/jakewharton/sdkmanager/internal/PackageResolver.groovy
index 9d60eb3..a79b372 100644
--- a/src/main/groovy/com/jakewharton/sdkmanager/internal/PackageResolver.groovy
+++ b/src/main/groovy/com/jakewharton/sdkmanager/internal/PackageResolver.groovy
@@ -4,6 +4,14 @@ import com.android.sdklib.repository.FullRevision
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.Dependency
+import org.gradle.api.artifacts.DependencySet
+import org.gradle.api.artifacts.LenientConfiguration
+import org.gradle.api.artifacts.UnresolvedDependency
+import org.gradle.api.artifacts.result.DependencyResult
+import org.gradle.api.artifacts.result.ResolutionResult
+import org.gradle.api.artifacts.result.ResolvedDependencyResult
+import org.gradle.api.artifacts.result.UnresolvedDependencyResult
+import org.gradle.api.internal.artifacts.result.DefaultResolvedDependencyResult
import org.gradle.api.logging.Logger
import org.gradle.api.logging.Logging
import org.gradle.api.tasks.StopExecutionException
@@ -134,6 +142,11 @@ class PackageResolver {
}
def resolveSupportLibraryRepository() {
+
+ project.repositories.maven {
+ url = androidRepositoryDir
+ }
+
def supportDeps = findDependenciesStartingWith 'com.android.support'
if (supportDeps.isEmpty()) {
@@ -143,15 +156,11 @@ class PackageResolver {
log.debug "Found support library dependencies: $supportDeps"
- project.repositories.maven {
- url = androidRepositoryDir
- }
-
def needsDownload = false;
if (!folderExists(androidRepositoryDir)) {
needsDownload = true
log.lifecycle 'Support library repository missing. Downloading...'
- } else if (!dependenciesAvailable(supportDeps)) {
+ } else if (supportDeps.count { it instanceof UnresolvedDependencyResult } > 0) {
needsDownload = true
log.lifecycle 'Support library repository outdated. Downloading update...'
}
@@ -279,11 +288,12 @@ class PackageResolver {
}
def findDependenciesStartingWith(String prefix) {
- def deps = []
+ def deps = new HashSet()
for (Configuration configuration : project.configurations) {
- for (Dependency dependency : configuration.dependencies) {
- if (dependency.group != null && dependency.group.startsWith(prefix)) {
- deps.add dependency
+ ResolutionResult result = configuration.getIncoming().getResolutionResult()
+ result.allDependencies { dependency ->
+ if (dependency.requested.displayName.startsWith(prefix)) {
+ deps << dependency
}
}
}
diff --git a/src/test/fixtures/missing-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.aar b/src/test/fixtures/missing-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.aar
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/fixtures/missing-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.pom b/src/test/fixtures/missing-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.pom
new file mode 100644
index 0000000..1cadce2
--- /dev/null
+++ b/src/test/fixtures/missing-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.pom
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+ com.etsy.android.grid
+ library
+ 1.0.5
+ aar
+
+
+ com.android.support
+ support-v4
+ 19.1.0
+ compile
+
+
+
diff --git a/src/test/fixtures/outdated-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.aar b/src/test/fixtures/outdated-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.aar
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/fixtures/outdated-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.pom b/src/test/fixtures/outdated-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.pom
new file mode 100644
index 0000000..1cadce2
--- /dev/null
+++ b/src/test/fixtures/outdated-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.pom
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+ com.etsy.android.grid
+ library
+ 1.0.5
+ aar
+
+
+ com.android.support
+ support-v4
+ 19.1.0
+ compile
+
+
+
diff --git a/src/test/fixtures/up-to-date-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.aar b/src/test/fixtures/up-to-date-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.aar
new file mode 100644
index 0000000..e69de29
diff --git a/src/test/fixtures/up-to-date-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.pom b/src/test/fixtures/up-to-date-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.pom
new file mode 100644
index 0000000..1cadce2
--- /dev/null
+++ b/src/test/fixtures/up-to-date-android-m2repository/localMaven/com/etsy/android/grid/library/1.0.5/library-1.0.5.pom
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+ com.etsy.android.grid
+ library
+ 1.0.5
+ aar
+
+
+ com.android.support
+ support-v4
+ 19.1.0
+ compile
+
+
+
diff --git a/src/test/groovy/com/jakewharton/sdkmanager/internal/PackageResolverTest.groovy b/src/test/groovy/com/jakewharton/sdkmanager/internal/PackageResolverTest.groovy
index fc0c6e5..71c9d2e 100644
--- a/src/test/groovy/com/jakewharton/sdkmanager/internal/PackageResolverTest.groovy
+++ b/src/test/groovy/com/jakewharton/sdkmanager/internal/PackageResolverTest.groovy
@@ -195,6 +195,24 @@ class PackageResolverTest {
assertThat(androidCommand).isEmpty()
}
+ @FixtureName("up-to-date-android-m2repository")
+ @Test public void upToDateIndirectSupportLibraryRepositoryRecognized() {
+ project.apply plugin: 'com.android.application'
+
+ def localMaven = new File(fixture.getRoot(), "localMaven")
+ assertThat(localMaven).exists()
+ project.repositories.maven {
+ url = localMaven
+ }
+
+ project.dependencies {
+ compile 'com.etsy.android.grid:library:1.0.5'
+ }
+
+ packageResolver.resolveSupportLibraryRepository()
+ assertThat(androidCommand).isEmpty()
+ }
+
@FixtureName("missing-android-m2repository")
@Test public void missingSupportLibraryRepositoryIsDownloaded() {
project.apply plugin: 'com.android.application'
@@ -206,6 +224,24 @@ class PackageResolverTest {
assertThat(androidCommand).containsExactly('update extra-android-m2repository')
}
+ @FixtureName("missing-android-m2repository")
+ @Test public void missingIndirectSupportLibraryRepositoryIsDownloaded() {
+ project.apply plugin: 'com.android.application'
+
+ def localMaven = new File(fixture.getRoot(), "localMaven")
+ assertThat(localMaven).exists()
+ project.repositories.maven {
+ url = localMaven
+ }
+
+ project.dependencies {
+ compile 'com.etsy.android.grid:library:1.0.5'
+ }
+
+ packageResolver.resolveSupportLibraryRepository()
+ assertThat(androidCommand).containsExactly('update extra-android-m2repository')
+ }
+
@FixtureName("missing-android-m2repository")
@Test public void missingSupportTestingRepositoryIsDownloaded() {
project.apply plugin: 'com.android.application'
@@ -228,6 +264,24 @@ class PackageResolverTest {
assertThat(androidCommand).containsExactly('update extra-android-m2repository')
}
+ @FixtureName("outdated-android-m2repository")
+ @Test public void outdatedIndirectSupportLibraryRepositoryIsDownloaded() {
+ project.apply plugin: 'com.android.application'
+
+ def localMaven = new File(fixture.getRoot(), "localMaven")
+ assertThat(localMaven).exists()
+ project.repositories.maven {
+ url = localMaven
+ }
+
+ project.dependencies {
+ compile 'com.etsy.android.grid:library:1.0.5'
+ }
+
+ packageResolver.resolveSupportLibraryRepository()
+ assertThat(androidCommand).containsExactly('update extra-android-m2repository')
+ }
+
@FixtureName("outdated-android-m2repository")
@Test public void outdatedSupportTestingRepositoryIsDownloaded() {
project.apply plugin: 'com.android.application'