From 441bdb68c6f601b31ca9187ed1b1af192b64cf49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Panuszewski?= Date: Mon, 8 Jan 2024 16:17:26 +0100 Subject: [PATCH] Fix resources exclusion in a multi-module project with git repo (#257) --- .../gradle/isolated/DefaultProjectParser.java | 10 +-- .../openrewrite/gradle/GradleProjectSpec.kt | 12 ++++ .../org/openrewrite/gradle/RewriteRunTest.kt | 66 ++++++++++++++++++- 3 files changed, 81 insertions(+), 7 deletions(-) diff --git a/plugin/src/main/java/org/openrewrite/gradle/isolated/DefaultProjectParser.java b/plugin/src/main/java/org/openrewrite/gradle/isolated/DefaultProjectParser.java index 25b229d4b..952190ea7 100644 --- a/plugin/src/main/java/org/openrewrite/gradle/isolated/DefaultProjectParser.java +++ b/plugin/src/main/java/org/openrewrite/gradle/isolated/DefaultProjectParser.java @@ -270,7 +270,7 @@ private static StringBuilder repeat(int repeat) { public Collection listSources() { // Use a sorted collection so that gradle input detection isn't thrown off by ordering - Set result = new TreeSet<>(omniParser(emptySet()).acceptedPaths(baseDir, project.getProjectDir().toPath())); + Set result = new TreeSet<>(omniParser(emptySet(), project).acceptedPaths(baseDir, project.getProjectDir().toPath())); //noinspection deprecation JavaPluginConvention javaConvention = project.getConvention().findPlugin(JavaPluginConvention.class); if (javaConvention != null) { @@ -809,7 +809,7 @@ public Stream parse(Project subproject, Set alreadyParsed, Exe for (File resourcesDir : sourceSet.getResources().getSourceDirectories()) { if (resourcesDir.exists() && !alreadyParsed.contains(resourcesDir.toPath())) { - OmniParser omniParser = omniParser(alreadyParsed); + OmniParser omniParser = omniParser(alreadyParsed, subproject); List accepted = omniParser.acceptedPaths(baseDir, resourcesDir.toPath()); sourceSetSourceFiles = Stream.concat( sourceSetSourceFiles, @@ -958,7 +958,7 @@ private SourceFileStream parseGradleWrapperFiles(Collection exclusi Stream sourceFiles = Stream.empty(); int fileCount = 0; if (project == project.getRootProject()) { - OmniParser omniParser = omniParser(alreadyParsed); + OmniParser omniParser = omniParser(alreadyParsed, project); List gradleWrapperFiles = Stream.of( "gradlew", "gradlew.bat", "gradle/wrapper/gradle-wrapper.jar", @@ -978,13 +978,13 @@ private SourceFileStream parseGradleWrapperFiles(Collection exclusi protected SourceFileStream parseNonProjectResources(Project subproject, Set alreadyParsed, ExecutionContext ctx, List projectProvenance, Stream sourceFiles) { //Collect any additional yaml/properties/xml files that are NOT already in a source set. - OmniParser omniParser = omniParser(alreadyParsed); + OmniParser omniParser = omniParser(alreadyParsed, subproject); List accepted = omniParser.acceptedPaths(baseDir, subproject.getProjectDir().toPath()); return SourceFileStream.build("", s -> { }).concat(omniParser.parse(accepted, baseDir, ctx), accepted.size()); } - private OmniParser omniParser(Set alreadyParsed) { + private OmniParser omniParser(Set alreadyParsed, Project project) { return OmniParser.builder( OmniParser.defaultResourceParsers(), PlainTextParser.builder() diff --git a/plugin/src/main/kotlin/org/openrewrite/gradle/GradleProjectSpec.kt b/plugin/src/main/kotlin/org/openrewrite/gradle/GradleProjectSpec.kt index 92620ec2f..9bb88361f 100644 --- a/plugin/src/main/kotlin/org/openrewrite/gradle/GradleProjectSpec.kt +++ b/plugin/src/main/kotlin/org/openrewrite/gradle/GradleProjectSpec.kt @@ -241,3 +241,15 @@ class GradleSourceSetSpec( fun gradleProject(dir: File, init: GradleProjectSpec.()->Unit): GradleProjectSpec { return GradleProjectSpec(dir).apply(init).build() } + +fun commitFilesToGitRepo(dir: File) { + exec("git init", dir) + exec("git config user.email user@test.com", dir) + exec("git config user.name TestUser", dir) + exec("git add .", dir) + exec("git commit -m \"Initial commit\"", dir) +} + +private fun exec(command: String, workingDirectory: File) { + Runtime.getRuntime().exec(command, null, workingDirectory) +} \ No newline at end of file diff --git a/plugin/src/test/kotlin/org/openrewrite/gradle/RewriteRunTest.kt b/plugin/src/test/kotlin/org/openrewrite/gradle/RewriteRunTest.kt index c066a41a4..cb0780840 100644 --- a/plugin/src/test/kotlin/org/openrewrite/gradle/RewriteRunTest.kt +++ b/plugin/src/test/kotlin/org/openrewrite/gradle/RewriteRunTest.kt @@ -26,6 +26,8 @@ import org.junit.jupiter.api.condition.DisabledIf import org.junit.jupiter.api.condition.DisabledOnOs import org.junit.jupiter.api.condition.OS import org.junit.jupiter.api.io.TempDir +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ValueSource import org.openrewrite.Issue import java.io.File @@ -259,6 +261,66 @@ class RewriteRunTest : RewritePluginTest { assertThat(propertiesFile.readText()).isEqualTo("bar=baz\n") } + @Test + fun `resources in subproject committed to git are correctly processed`( + @TempDir projectDir: File + ) { + gradleProject(projectDir) { + rewriteYaml(""" + type: specs.openrewrite.org/v1beta/recipe + name: org.openrewrite.ChangeFooToBar + recipeList: + - org.openrewrite.properties.ChangePropertyKey: + oldPropertyKey: foo + newPropertyKey: bar + """) + buildGradle(""" + plugins { + id("org.openrewrite.rewrite") + id("java") + } + + rewrite { + activeRecipe("org.openrewrite.ChangeFooToBar") + } + + repositories { + mavenLocal() + mavenCentral() + maven { + url = uri("https://oss.sonatype.org/content/repositories/snapshots") + } + } + + subprojects { + apply plugin: "java" + + repositories { + mavenCentral() + } + + dependencies { + implementation(project(":")) + implementation("junit:junit:4.12") + } + } + """.trimIndent()) + subproject("a") { + sourceSet("main") { + propertiesFile("test.properties", "foo=baz\n") + } + } + } + commitFilesToGitRepo(projectDir) + + val result = runGradle(projectDir, "rewriteRun") + val rewriteRunResult = result.task(":rewriteRun")!! + assertThat(rewriteRunResult.outcome).isEqualTo(TaskOutcome.SUCCESS) + + val propertiesFile = File(projectDir, "a/src/main/resources/test.properties") + assertThat(propertiesFile.readText()).isEqualTo("bar=baz\n") + } + @Suppress("ClassInitializerMayBeStatic", "StatementWithEmptyBody", "ConstantConditions") @Test fun `Checkstyle configuration is applied as a style`( @@ -531,7 +593,7 @@ class RewriteRunTest : RewritePluginTest { - org.openrewrite.gradle.UpgradeDependencyVersion: groupId: com.fasterxml.jackson.core artifactId: jackson-core - nevVersion: 2.16.0 + newVersion: 2.16.0 """) settingsGradle(""" dependencyResolutionManagement { @@ -573,7 +635,7 @@ class RewriteRunTest : RewritePluginTest { } dependencies { - implementation("com.fasterxml.jackson.core:jackson-core:2.16.1") + implementation("com.fasterxml.jackson.core:jackson-core:2.16.0") } rewrite {