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.
This commit is contained in:
Alexander Aprelev 2018-11-14 08:54:13 -08:00 committed by GitHub
parent 29d5210d8b
commit 3b7942c444
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -443,18 +443,23 @@ Future<XcodeBuildResult> buildXcodeProject({
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 @@ Future<XcodeBuildResult> buildXcodeProject({
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)}',