diffplug / diffplug/spotless

gradle: excluding spotlessJava should also exclude spotlessApply

Open
#2,097 2 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
5.6k
Forks
559
Avg merge
1d 13h
Merged PRs (30d)
34

Description

When running `gradle compileJava -xspotlessJava`, `spotlessApply` will still run. Since `spotlessApply` copies files from build/spotless/spotlessJava to the source tree, this can overwrite unsaved work in progress, making teams **lose valuable work** due to a simple misunderstanding. Since this is a silent overwrite, team might also not notice that changes have been made, allowing **bugs to enter the codebase**.

`spotlessApply` should only ever run when the files it copies were created as part of the same build, to ensure no work is lost.

This happened on a company project, so I cannot quickly produce a public repo, but I could if need be. The steps to reproduce would be (in a java project using the spotless plugin...):

```
git clone ...
cd ...
// assuming this will have some file that can be formatted
./gradlew compileJava
git reset --hard
git checkout other_branch
// assuming some file from earlier branch is different here

./gradlew compileJava -xspotlessJava
git diff
```

The last git diff should not have any changes. However, currently for me this overwrites the source file with the spotless output from the ./gradlew compileJava task.

Using gradle8, java17, spotless 6.25.0 on MacOs.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.