Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix stdin pipe is being closed exception on Windows for large .proto files #2153

Merged
merged 6 commits into from
Jun 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,15 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (

## [Unreleased]
### Added
* `FileSignature.Promised` and `JarState.Promised` to facilitate round-trip serialization for the Gradle configuration cache. ([#1945](https://github.com/diffplug/spotless/pull/1945))
* `FileSignature.Promised` and `JarState.Promised` to facilitate round-trip serialization for the Gradle configuration cache. ([#1945](https://github.com/diffplug/spotless/pull/1945))
* Respect `.editorconfig` settings for formatting shell via `shfmt` ([#2031](https://github.com/diffplug/spotless/pull/2031))
### Fixed
* Check if ktlint_code_style is set in .editorconfig before overriding it ([#2143](https://github.com/diffplug/spotless/issues/2143))
* Ignore system git config when running tests ([#1990](https://github.com/diffplug/spotless/issues/1990))
* Correctly provide EditorConfig property types for Ktlint ([#2052](https://github.com/diffplug/spotless/issues/2052))
* Made ShadowCopy (`npmInstallCache`) more robust by re-creating the cache dir if it goes missing ([#1984](https://github.com/diffplug/spotless/issues/1984),[2096](https://github.com/diffplug/spotless/pull/2096))
* scalafmt.conf fileOverride section now works correctly ([#1854](https://github.com/diffplug/spotless/pull/1854))
* Fix stdin pipe is being closed exception on Windows for large .proto files ([#2147](https://github.com/diffplug/spotless/issues/2147))
* Reworked ShadowCopy (`npmInstallCache`) to use atomic filesystem operations, resolving several race conditions that could arise ([#2151](https://github.com/diffplug/spotless/pull/2151))
### Changes
* Bump default `cleanthat` version to latest `2.16` -> `2.20`. ([#1725](https://github.com/diffplug/spotless/pull/1725))
Expand Down
3 changes: 2 additions & 1 deletion lib/src/main/java/com/diffplug/spotless/ProcessRunner.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2020-2023 DiffPlug
* Copyright 2020-2024 DiffPlug
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -163,6 +163,7 @@ public LongRunningProcess start(@Nullable File cwd, @Nullable Map<String, String
}
// write stdin
process.getOutputStream().write(stdin);
process.getOutputStream().flush();
process.getOutputStream().close();
return new LongRunningProcess(process, args, outputFut, errorFut);
}
Expand Down
3 changes: 2 additions & 1 deletion plugin-gradle/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (
## [Unreleased]
### Added
* Full, no-asterisk support of Gradle configuration cache. ([#1274](https://github.com/diffplug/spotless/issues/1274), giving up on [#987](https://github.com/diffplug/spotless/issues/987))
* In order to use `custom`, you must now use Gradle 8.0+.
* In order to use `custom`, you must now use Gradle 8.0+.
* Respect `.editorconfig` settings for formatting shell via `shfmt` ([#2031](https://github.com/diffplug/spotless/pull/2031))
* Add support for formatting and sorting Maven POMs ([#2082](https://github.com/diffplug/spotless/issues/2082))
### Fixed
Expand All @@ -16,6 +16,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (
* Fixed memory leak introduced in 6.21.0 ([#2067](https://github.com/diffplug/spotless/issues/2067))
* Made ShadowCopy (`npmInstallCache`) more robust by re-creating the cache dir if it goes missing ([#1984](https://github.com/diffplug/spotless/issues/1984),[2096](https://github.com/diffplug/spotless/pull/2096))
* scalafmt.conf fileOverride section now works correctly ([#1854](https://github.com/diffplug/spotless/pull/1854))
* Fix stdin pipe is being closed exception on Windows for large .proto files ([#2147](https://github.com/diffplug/spotless/issues/2147))
* Reworked ShadowCopy (`npmInstallCache`) to use atomic filesystem operations, resolving several race conditions that could arise ([#2151](https://github.com/diffplug/spotless/pull/2151))
### Changes
* Bump default `cleanthat` version to latest `2.16` -> `2.20`. ([#1725](https://github.com/diffplug/spotless/pull/1725))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2022-2023 DiffPlug
* Copyright 2022-2024 DiffPlug
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -23,6 +23,22 @@

@BufTest
class BufIntegrationTest extends GradleIntegrationHarness {
@Test
void bufLarge() throws IOException {
setFile("build.gradle").toLines(
"plugins {",
" id 'com.diffplug.spotless'",
"}",
"spotless {",
" protobuf {",
" buf()",
" }",
"}");
setFile("buf.proto").toResource("protobuf/buf/buf_large.proto");
gradleRunner().withArguments("spotlessApply").build();
assertFile("buf.proto").sameAsResource("protobuf/buf/buf_large.proto.clean");
}

@Test
void buf() throws IOException {
setFile("build.gradle").toLines(
Expand Down
1 change: 1 addition & 0 deletions plugin-maven/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (
* Correctly provide EditorConfig property types for Ktlint ([#2052](https://github.com/diffplug/spotless/issues/2052))
* Made ShadowCopy (`npmInstallCache`) more robust by re-creating the cache dir if it goes missing ([#1984](https://github.com/diffplug/spotless/issues/1984),[2096](https://github.com/diffplug/spotless/pull/2096))
* scalafmt.conf fileOverride section now works correctly ([#1854](https://github.com/diffplug/spotless/pull/1854))
* Fix stdin pipe is being closed exception on Windows for large .proto files ([#2147](https://github.com/diffplug/spotless/issues/2147))
* Reworked ShadowCopy (`npmInstallCache`) to use atomic filesystem operations, resolving several race conditions that could arise ([#2151](https://github.com/diffplug/spotless/pull/2151))
### Changes
* Bump default `cleanthat` version to latest `2.16` -> `2.20`. ([#1725](https://github.com/diffplug/spotless/pull/1725))
Expand Down
229 changes: 229 additions & 0 deletions testlib/src/main/resources/protobuf/buf/buf_large.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
syntax = "proto3";

package com.diffplug.gradle.spotless.buf.proto;

option java_multiple_files = true;

message Message {
string message = 1;
}

service Services {
rpc Echo(Message) returns (Message);
}

message Message01 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message02 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message03 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message04 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message05 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message06 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message07 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message08 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message09 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message10 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message11 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message12 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message13 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message14 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message15 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message16 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message17 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}

message Message18 {
string message1 = 1;
string message2 = 2;
string message3 = 3;
string message4 = 4;
string message5 = 5;
string message6 = 6;
string message7 = 7;
string message8 = 8;
string message9 = 9;
}
Loading
Loading