Fix multi-step build handling process. (#24310)
* Fix multi-step build handling process.
Stop listening for new step updates after 'all done.' log message. Make sure that we don't delete file too soon, until listener had a chance to process the 'all done' message.
Fixes https://github.com/flutter/flutter/issues/18750
* Emit 'all output' explicitly when build process is done.
diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart
index 6238ce5..bfa1247 100644
--- a/packages/flutter_tools/lib/src/ios/mac.dart
+++ b/packages/flutter_tools/lib/src/ios/mac.dart
@@ -443,18 +443,23 @@
Status initialBuildStatus;
Directory tempDir;
+ File scriptOutputPipeFile;
if (logger.hasTerminal) {
tempDir = fs.systemTempDirectory.createTempSync('flutter_build_log_pipe.');
- final File scriptOutputPipeFile = tempDir.childFile('pipe_to_stdout');
+ scriptOutputPipeFile = tempDir.childFile('pipe_to_stdout');
os.makePipe(scriptOutputPipeFile.path);
Future<void> listenToScriptOutputLine() async {
final List<String> lines = await scriptOutputPipeFile.readAsLines();
for (String line in lines) {
- if (line == 'done') {
+ if (line == 'done' || line == 'all done') {
buildSubStatus?.stop();
buildSubStatus = null;
- return null;
+ if (line == 'all done') {
+ // Free pipe file.
+ tempDir?.deleteSync(recursive: true);
+ return null;
+ }
} else {
initialBuildStatus.cancel();
buildSubStatus = logger.startProgress(
@@ -480,11 +485,11 @@
workingDirectory: app.project.hostAppRoot.path,
allowReentrantFlutter: true
);
+ // Notifies listener that no more output is coming.
+ scriptOutputPipeFile?.writeAsStringSync('all done');
buildSubStatus?.stop();
initialBuildStatus?.cancel();
buildStopwatch.stop();
- // Free pipe file.
- tempDir?.deleteSync(recursive: true);
printStatus(
'Xcode build done.'.padRight(kDefaultStatusPadding + 1)
+ '${getElapsedAsSeconds(buildStopwatch.elapsed).padLeft(5)}',