Skip to content

Commit 5209723

Browse files
authored
Avoid circular task dependency when build includes itself (#143)
Fixes #141
1 parent 219e762 commit 5209723

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

plugin-test/src/test/groovy/org/gradle/github/dependencygraph/MultiProjectDependencyExtractorTest.groovy

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package org.gradle.github.dependencygraph
22

33

44
import org.gradle.test.fixtures.maven.MavenModule
5+
import org.gradle.util.GradleVersion
6+
import spock.lang.IgnoreIf
57

68
class MultiProjectDependencyExtractorTest extends BaseExtractorTest {
79
private MavenModule foo
@@ -250,4 +252,32 @@ class MultiProjectDependencyExtractorTest extends BaseExtractorTest {
250252
"org.test:foo:1.0": [package_url: purlFor(foo)]
251253
])
252254
}
255+
256+
@IgnoreIf({
257+
// `includeBuild('.')` is not possible with Gradle < 6.1
258+
GradleVersion.version(testGradleVersion) < GradleVersion.version("6.1")
259+
})
260+
def "extracts dependencies from build that includes itself"() {
261+
given:
262+
settingsFile << """
263+
includeBuild('.')
264+
"""
265+
buildFile << """
266+
apply plugin: 'java'
267+
dependencies {
268+
implementation 'org.test:bar:1.0'
269+
}
270+
271+
"""
272+
273+
when:
274+
run(":ForceDependencyResolutionPlugin_resolveAllDependencies")
275+
276+
then:
277+
def manifest = gitHubManifest()
278+
manifest.sourceFile == "settings.gradle"
279+
manifest.assertResolved([
280+
"org.test:bar:1.0": [package_url: purlFor(bar)]
281+
])
282+
}
253283
}

plugin/src/main/kotlin/org/gradle/forceresolve/ForceDependencyResolutionPlugin.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ class ForceDependencyResolutionPlugin : Plugin<Gradle> {
3939

4040
// Depend on all 'resolveBuildDependencies' task in each included build
4141
gradle.includedBuilds.forEach { includedBuild ->
42-
resolveAllDeps.configure {
43-
it.dependsOn(includedBuild.task(":$RESOLVE_ALL_TASK"))
42+
if (includedBuild.projectDir != gradle.rootProject.projectDir) {
43+
resolveAllDeps.configure {
44+
it.dependsOn(includedBuild.task(":$RESOLVE_ALL_TASK"))
45+
}
4446
}
4547
}
4648
}

0 commit comments

Comments
 (0)