From 7bfcc0e80f47af6961784037e68033bf6ab8898a Mon Sep 17 00:00:00 2001 From: Nitin-Poojary <70025277+Nitin-Poojary@users.noreply.github.com> Date: Tue, 8 Aug 2023 06:08:39 +0530 Subject: [PATCH] [pigeon] Recursively create output target files (#4458) Recursively creates output target files before trying to write to it. closes #[128820](https://github.com/flutter/flutter/issues/128820) --- packages/pigeon/CHANGELOG.md | 4 ++++ packages/pigeon/lib/generator_tools.dart | 2 +- packages/pigeon/lib/pigeon_lib.dart | 1 + packages/pigeon/pubspec.yaml | 2 +- packages/pigeon/tool/shared/test_suites.dart | 7 +++++++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/pigeon/CHANGELOG.md b/packages/pigeon/CHANGELOG.md index 1cd0806090..9f05268577 100644 --- a/packages/pigeon/CHANGELOG.md +++ b/packages/pigeon/CHANGELOG.md @@ -1,3 +1,7 @@ +## 10.1.6 + +* Fixes generation failures when an output file is in a directory that doesn't already exist. + ## 10.1.5 * Fixes import in generated Dart test output when overriding package name. diff --git a/packages/pigeon/lib/generator_tools.dart b/packages/pigeon/lib/generator_tools.dart index 62113aeef6..19e05709cd 100644 --- a/packages/pigeon/lib/generator_tools.dart +++ b/packages/pigeon/lib/generator_tools.dart @@ -13,7 +13,7 @@ import 'ast.dart'; /// The current version of pigeon. /// /// This must match the version in pubspec.yaml. -const String pigeonVersion = '10.1.5'; +const String pigeonVersion = '10.1.6'; /// Read all the content from [stdin] to a String. String readStdin() { diff --git a/packages/pigeon/lib/pigeon_lib.dart b/packages/pigeon/lib/pigeon_lib.dart index ae5d7ad346..10a6af57b0 100644 --- a/packages/pigeon/lib/pigeon_lib.dart +++ b/packages/pigeon/lib/pigeon_lib.dart @@ -389,6 +389,7 @@ IOSink? _openSink(String? output, {String basePath = ''}) { sink = stdout; } else { file = File(path.posix.join(basePath, output)); + file.createSync(recursive: true); sink = file.openWrite(); } return sink; diff --git a/packages/pigeon/pubspec.yaml b/packages/pigeon/pubspec.yaml index 90c81d7287..68516fcfa6 100644 --- a/packages/pigeon/pubspec.yaml +++ b/packages/pigeon/pubspec.yaml @@ -2,7 +2,7 @@ name: pigeon description: Code generator tool to make communication between Flutter and the host platform type-safe and easier. repository: https://github.com/flutter/packages/tree/main/packages/pigeon issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3Apigeon -version: 10.1.5 # This must match the version in lib/generator_tools.dart +version: 10.1.6 # This must match the version in lib/generator_tools.dart environment: sdk: ">=2.19.0 <4.0.0" diff --git a/packages/pigeon/tool/shared/test_suites.dart b/packages/pigeon/tool/shared/test_suites.dart index 5e45c31ff5..1a5b853087 100644 --- a/packages/pigeon/tool/shared/test_suites.dart +++ b/packages/pigeon/tool/shared/test_suites.dart @@ -366,6 +366,13 @@ Future _runCommandLineTests() async { '--ast_out', tempOutput ], + // Test writing a file in a directory that doesn't exist. + [ + '--input', + 'pigeons/message.dart', + '--dart_out', + '$tempDir/subdirectory/does/not/exist/message.g.dart', + ], ]; int exitCode = 0;