gradle: excluding spotlessJava should also exclude spotlessApply
- 主要言語
- 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