Skip to content

Commit d322c63

Browse files
committed
We now fail-fast if the user tries to use configuration-cache.
1 parent 9164ac1 commit d322c63

File tree

4 files changed

+58
-25
lines changed

4 files changed

+58
-25
lines changed

plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessTaskImpl.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public abstract class SpotlessTaskImpl extends SpotlessTask {
5050
void init(Provider<SpotlessTaskService> service) {
5151
getTaskService().set(service);
5252
getProjectDir().set(getProject().getProjectDir());
53+
service.get().registerSourceCreated(this);
5354
}
5455

5556
@Inject
@@ -68,17 +69,21 @@ public void performAction(InputChanges inputs) throws Exception {
6869
Files.createDirectories(outputDirectory.toPath());
6970
}
7071

71-
try (Formatter formatter = buildFormatter()) {
72-
for (FileChange fileChange : inputs.getFileChanges(target)) {
73-
File input = fileChange.getFile();
74-
if (fileChange.getChangeType() == ChangeType.REMOVED) {
75-
deletePreviousResult(input);
76-
} else {
77-
if (input.isFile()) {
78-
processInputFile(formatter, input);
72+
if (getTaskService().get().sourceWasCreatedThisBuild(this)) {
73+
try (Formatter formatter = buildFormatter()) {
74+
for (FileChange fileChange : inputs.getFileChanges(target)) {
75+
File input = fileChange.getFile();
76+
if (fileChange.getChangeType() == ChangeType.REMOVED) {
77+
deletePreviousResult(input);
78+
} else {
79+
if (input.isFile()) {
80+
processInputFile(formatter, input);
81+
}
7982
}
8083
}
8184
}
85+
} else {
86+
throw new GradleException("Spotless doesn't support configuration cache yet");
8287
}
8388
}
8489

plugin-gradle/src/main/java/com/diffplug/gradle/spotless/SpotlessTaskService.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,30 @@
4242
* apply already did).
4343
*/
4444
public abstract class SpotlessTaskService implements BuildService<BuildServiceParameters.None> {
45+
private final Map<String, SpotlessTask> sourceCreated = Collections.synchronizedMap(new HashMap<>());
4546
private final Map<String, SpotlessApply> apply = Collections.synchronizedMap(new HashMap<>());
4647
private final Map<String, SpotlessTask> source = Collections.synchronizedMap(new HashMap<>());
4748
private final Map<String, Provisioner> provisioner = Collections.synchronizedMap(new HashMap<>());
4849

49-
public Provisioner provisionerFor(Project project) {
50+
Provisioner provisionerFor(Project project) {
5051
return provisioner.computeIfAbsent(project.getPath(), unused -> {
5152
return GradleProvisioner.newDedupingProvisioner(project);
5253
});
5354
}
5455

55-
public void registerSourceAlreadyRan(SpotlessTask task) {
56+
void registerSourceCreated(SpotlessTask spotlessTask) {
57+
sourceCreated.put(spotlessTask.getPath(), spotlessTask);
58+
}
59+
60+
boolean sourceWasCreatedThisBuild(SpotlessTask spotlessTask) {
61+
return sourceCreated.containsKey(spotlessTask.getPath());
62+
}
63+
64+
void registerSourceAlreadyRan(SpotlessTask task) {
5665
source.put(task.getPath(), task);
5766
}
5867

59-
public void registerApplyAlreadyRan(SpotlessApply task) {
68+
void registerApplyAlreadyRan(SpotlessApply task) {
6069
apply.put(task.sourceTaskPath(), task);
6170
}
6271

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/ConfigurationCacheTest.java

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,16 @@
1616
package com.diffplug.gradle.spotless;
1717

1818
import java.io.IOException;
19-
import java.util.ArrayList;
20-
import java.util.Arrays;
21-
import java.util.List;
2219

20+
import org.gradle.testkit.runner.BuildResult;
21+
import org.gradle.testkit.runner.GradleRunner;
2322
import org.junit.jupiter.api.Test;
2423

2524
public class ConfigurationCacheTest extends GradleIntegrationHarness {
26-
protected void runTasks(String... tasks) throws IOException {
25+
@Override
26+
protected GradleRunner gradleRunner() throws IOException {
2727
setFile("gradle.properties").toContent("org.gradle.unsafe.configuration-cache=true");
28-
List<String> args = new ArrayList<>();
29-
args.addAll(Arrays.asList(tasks));
30-
gradleRunner()
31-
.withGradleVersion(GradleVersionSupport.CONFIGURATION_CACHE.version)
32-
.withArguments(args)
33-
.forwardOutput()
34-
.build();
28+
return super.gradleRunner().withGradleVersion(GradleVersionSupport.CONFIGURATION_CACHE.version);
3529
}
3630

3731
@Test
@@ -47,7 +41,7 @@ public void helpConfigures() throws IOException {
4741
" googleJavaFormat('1.2')",
4842
" }",
4943
"}");
50-
runTasks("help");
44+
gradleRunner().withArguments("help").build();
5145
}
5246

5347
@Test
@@ -64,6 +58,31 @@ public void helpConfiguresIfTasksAreCreated() throws IOException {
6458
" }",
6559
"}",
6660
"tasks.named('spotlessJavaApply').get()");
67-
runTasks("help");
61+
gradleRunner().withArguments("help").build();
62+
}
63+
64+
@Test
65+
public void gjf() throws IOException {
66+
setFile("build.gradle").toLines(
67+
"plugins {",
68+
" id 'com.diffplug.spotless'",
69+
"}",
70+
"repositories { mavenCentral() }",
71+
"apply plugin: 'java'",
72+
"spotless {",
73+
" java {",
74+
" target file('test.java')",
75+
" googleJavaFormat('1.2')",
76+
" }",
77+
"}");
78+
79+
// first run works
80+
setFile("test.java").toResource("java/googlejavaformat/JavaCodeUnformatted.test");
81+
gradleRunner().withArguments("spotlessApply").build();
82+
assertFile("test.java").sameAsResource("java/googlejavaformat/JavaCodeFormatted.test");
83+
84+
// but the second fails
85+
BuildResult failure = gradleRunner().withArguments("spotlessApply").buildAndFail();
86+
failure.getOutput().contains("> Spotless doesn't support configuration cache yet");
6887
}
6988
}

plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationHarness.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ void gitAttributes() throws IOException {
8383
setFile(".gitattributes").toContent("* text eol=lf");
8484
}
8585

86-
protected final GradleRunner gradleRunner() throws IOException {
86+
protected GradleRunner gradleRunner() throws IOException {
8787
return GradleRunner.create()
8888
.withGradleVersion(GradleVersionSupport.MINIMUM.version)
8989
.withProjectDir(rootFolder())

0 commit comments

Comments
 (0)