diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index ceb8f5ec43..5e22b36f27 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -3,6 +3,8 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`). ## [Unreleased] +### Fixed +* `ratchetFrom` had a bug (now fixed) such that it reported all files outside the root directory as changed. ([#594](https://github.com/diffplug/spotless/pull/594)) ## [4.1.0] - 2020-06-01 ### Added diff --git a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GitRatchet.java b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GitRatchet.java index b366f1946a..1f61b0459d 100644 --- a/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GitRatchet.java +++ b/plugin-gradle/src/main/java/com/diffplug/gradle/spotless/GitRatchet.java @@ -66,6 +66,7 @@ public static boolean isClean(Project project, ObjectId treeSha, File file) thro DirCache dirCache = repo.readDirCache(); try (TreeWalk treeWalk = new TreeWalk(repo)) { + treeWalk.setRecursive(true); treeWalk.addTree(treeSha); treeWalk.addTree(new DirCacheIterator(dirCache)); treeWalk.addTree(new FileTreeIterator(repo)); diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RatchetFromTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RatchetFromTest.java index cfcf04bf60..576ef1fc40 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RatchetFromTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RatchetFromTest.java @@ -19,6 +19,8 @@ import org.junit.Test; public class RatchetFromTest extends GradleIntegrationTest { + private static final String TEST_PATH = "src/markdown/test.md"; + @Test public void singleProjectExhaustive() throws Exception { Git git = Git.init().setDirectory(rootFolder()).call(); @@ -29,13 +31,13 @@ public void singleProjectExhaustive() throws Exception { "spotless {", " ratchetFrom 'baseline'", " format 'misc', {", - " target '*.md'", + " target 'src/markdown/*.md'", " custom 'lowercase', { str -> str.toLowerCase() }", " bumpThisNumberIfACustomStepChanges(1)", " }", "}"); - setFile("test.md").toContent("HELLO"); - git.add().addFilepattern("test.md").call(); + setFile(TEST_PATH).toContent("HELLO"); + git.add().addFilepattern(TEST_PATH).call(); git.commit().setMessage("Initial state").call(); // tag this initial state as the baseline for spotless to ratchet from git.tag().setName("baseline").call(); @@ -45,41 +47,41 @@ public void singleProjectExhaustive() throws Exception { assertClean(); // but if we change it so that it is not clean, spotless will now say it is dirty - setFile("test.md").toContent("HELLO WORLD"); + setFile(TEST_PATH).toContent("HELLO WORLD"); assertDirty(); gradleRunner().withArguments("spotlessApply").build(); - assertFile("test.md").hasContent("hello world"); + assertFile(TEST_PATH).hasContent("hello world"); // but if we make it unchanged again, it goes back to being clean - setFile("test.md").toContent("HELLO"); + setFile(TEST_PATH).toContent("HELLO"); assertClean(); // and if we make the index dirty - setFile("test.md").toContent("HELLO WORLD"); - git.add().addFilepattern("test.md").call(); + setFile(TEST_PATH).toContent("HELLO WORLD"); + git.add().addFilepattern(TEST_PATH).call(); { // and the content dirty in the same way, then it's dirty assertDirty(); // if we make the content something else dirty, then it's dirty - setFile("test.md").toContent("HELLO MOM"); + setFile(TEST_PATH).toContent("HELLO MOM"); assertDirty(); // if we make the content unchanged, even though index it and index are dirty, then it's clean - setFile("test.md").toContent("HELLO"); + setFile(TEST_PATH).toContent("HELLO"); assertClean(); // if we delete the file, but it's still in the index, then it's clean - setFile("test.md").deleted(); + setFile(TEST_PATH).deleted(); assertClean(); } // if we remove the file from the index - git.rm().addFilepattern("test.md").setCached(true).call(); + git.rm().addFilepattern(TEST_PATH).setCached(true).call(); { // and it's gone in real life too, then it's clean assertClean(); // if the content is there and unchanged, then it's clean - setFile("test.md").toContent("HELLO"); + setFile(TEST_PATH).toContent("HELLO"); assertClean(); // if the content is dirty, then it's dirty - setFile("test.md").toContent("HELLO WORLD"); + setFile(TEST_PATH).toContent("HELLO WORLD"); assertDirty(); } diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RegisterDependenciesTaskTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RegisterDependenciesTaskTest.java index 810635cffc..e5b6c3c34f 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RegisterDependenciesTaskTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/RegisterDependenciesTaskTest.java @@ -43,10 +43,10 @@ public void registerDependencies() throws IOException { if (JreVersion.thisVm() == JreVersion._8) { String oldestSupported = gradleRunner() .withArguments("spotlessCheck").build().getOutput(); - Assertions.assertThat(oldestSupported.replace("\r", "")).startsWith( - ":spotlessCheck UP-TO-DATE\n" + - ":spotlessInternalRegisterDependencies\n" + - ":sub:spotlessJava\n" + + Assertions.assertThat(oldestSupported.replace("\r", "")) + .startsWith(":spotlessCheck UP-TO-DATE\n" + + ":spotlessInternalRegisterDependencies\n") + .contains(":sub:spotlessJava\n" + ":sub:spotlessJavaCheck\n" + ":sub:spotlessCheck\n" + "\n" + @@ -56,10 +56,10 @@ public void registerDependencies() throws IOException { setFile("gradle.properties").toLines(); String newestSupported = gradleRunner().withGradleVersion("6.0") .withArguments("spotlessCheck").build().getOutput(); - Assertions.assertThat(newestSupported.replace("\r", "")).startsWith( - "> Task :spotlessCheck UP-TO-DATE\n" + - "> Task :spotlessInternalRegisterDependencies\n" + - "> Task :sub:spotlessJava\n" + + Assertions.assertThat(newestSupported.replace("\r", "")) + .startsWith("> Task :spotlessCheck UP-TO-DATE\n" + + "> Task :spotlessInternalRegisterDependencies\n") + .contains("> Task :sub:spotlessJava\n" + "> Task :sub:spotlessJavaCheck\n" + "> Task :sub:spotlessCheck\n" + "\n" +