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'