Skip to content

Commit caed855

Browse files
committed
Hook the ratchet into the regular task.
1 parent 865a577 commit caed855

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

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

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
import java.util.List;
2727
import java.util.Locale;
2828
import java.util.Objects;
29-
import java.util.function.Predicate;
3029
import java.util.regex.Pattern;
3130
import java.util.stream.Collectors;
3231

32+
import org.eclipse.jgit.lib.ObjectId;
3333
import org.gradle.api.DefaultTask;
3434
import org.gradle.api.GradleException;
3535
import org.gradle.api.file.FileCollection;
@@ -44,7 +44,9 @@
4444
import org.gradle.api.tasks.incremental.IncrementalTaskInputs;
4545

4646
import com.diffplug.common.base.Errors;
47+
import com.diffplug.common.base.Preconditions;
4748
import com.diffplug.common.base.StringPrinter;
49+
import com.diffplug.common.base.Throwing;
4850
import com.diffplug.spotless.FormatExceptionPolicy;
4951
import com.diffplug.spotless.FormatExceptionPolicyStrict;
5052
import com.diffplug.spotless.Formatter;
@@ -86,6 +88,13 @@ public void setLineEndingsPolicy(LineEnding.Policy lineEndingsPolicy) {
8688
this.lineEndingsPolicy = Objects.requireNonNull(lineEndingsPolicy);
8789
}
8890

91+
ObjectId treeSha = ObjectId.zeroId();
92+
93+
@Input
94+
public ObjectId getRatchetSha() {
95+
return treeSha;
96+
}
97+
8998
@Deprecated
9099
@Internal
91100
public boolean isPaddedCell() {
@@ -179,10 +188,13 @@ public void performAction(IncrementalTaskInputs inputs) throws Exception {
179188
Files.createDirectories(outputDirectory.toPath());
180189
}
181190

182-
Predicate<File> shouldInclude;
191+
Throwing.Specific.Predicate<File, IOException> shouldInclude;
183192
if (this.filePatterns.isEmpty()) {
184193
shouldInclude = file -> true;
185194
} else {
195+
Preconditions.checkArgument(treeSha == ObjectId.zeroId(),
196+
"Cannot use 'ratchetFrom' and '-PspotlessFiles' at the same time");
197+
186198
// a list of files has been passed in via project property
187199
final String[] includePatterns = this.filePatterns.split(",");
188200
final List<Pattern> compiledIncludePatterns = Arrays.stream(includePatterns)
@@ -197,32 +209,37 @@ public void performAction(IncrementalTaskInputs inputs) throws Exception {
197209
try (Formatter formatter = buildFormatter()) {
198210
inputs.outOfDate(inputDetails -> {
199211
File input = inputDetails.getFile();
200-
if (shouldInclude.test(input) && input.isFile()) {
201-
try {
212+
try {
213+
if (shouldInclude.test(input) && input.isFile()) {
202214
processInputFile(formatter, input);
203-
} catch (IOException e) {
204-
throw Errors.asRuntime(e);
205215
}
216+
} catch (IOException e) {
217+
throw Errors.asRuntime(e);
206218
}
207219
});
208220
}
209221

210222
inputs.removed(removedDetails -> {
211223
File input = removedDetails.getFile();
212-
if (shouldInclude.test(input)) {
213-
try {
224+
try {
225+
if (shouldInclude.test(input)) {
214226
deletePreviousResult(input);
215-
} catch (IOException e) {
216-
throw Errors.asRuntime(e);
217227
}
228+
} catch (IOException e) {
229+
throw Errors.asRuntime(e);
218230
}
219231
});
220232
}
221233

222234
private void processInputFile(Formatter formatter, File input) throws IOException {
223235
File output = getOutputFile(input);
224236
getLogger().debug("Applying format to " + input + " and writing to " + output);
225-
PaddedCell.DirtyState dirtyState = PaddedCell.calculateDirtyState(formatter, input);
237+
PaddedCell.DirtyState dirtyState;
238+
if (treeSha != ObjectId.zeroId() && GitRatchet.isClean(getProject(), treeSha, input)) {
239+
dirtyState = PaddedCell.isClean();
240+
} else {
241+
dirtyState = PaddedCell.calculateDirtyState(formatter, input);
242+
}
226243
if (dirtyState.isClean()) {
227244
// Remove previous output if it exists
228245
Files.deleteIfExists(output.toPath());

0 commit comments

Comments
 (0)