diffplug / diffplug/spotless

gradle: excluding spotlessJava should also exclude spotlessApply

オープン
#2,097 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
bug
主要言語
Java
スター
5.6k
フォーク
559
平均マージ
1日 14時間
マージ済み PR(30日)
43

説明

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.

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

まず、Gradle、Java 17、Spotless 6.25.0 を使用する Java プロジェクトで、報告された一連の手順を再現します。特に、`./gradlew compileJava -xspotlessJava` の後に `git diff` を実行します。`spotlessJava` と `spotlessApply` がどのように接続されているかを調査します。`spotlessJava` を除外してもソースツリーに変更がないことを確認できれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java
領域
build-system
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。