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:
parent
29d5210d8b
commit
3b7942c444
@ -443,18 +443,23 @@ Future<XcodeBuildResult> buildXcodeProject({
|
|||||||
Status initialBuildStatus;
|
Status initialBuildStatus;
|
||||||
Directory tempDir;
|
Directory tempDir;
|
||||||
|
|
||||||
|
File scriptOutputPipeFile;
|
||||||
if (logger.hasTerminal) {
|
if (logger.hasTerminal) {
|
||||||
tempDir = fs.systemTempDirectory.createTempSync('flutter_build_log_pipe.');
|
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);
|
os.makePipe(scriptOutputPipeFile.path);
|
||||||
|
|
||||||
Future<void> listenToScriptOutputLine() async {
|
Future<void> listenToScriptOutputLine() async {
|
||||||
final List<String> lines = await scriptOutputPipeFile.readAsLines();
|
final List<String> lines = await scriptOutputPipeFile.readAsLines();
|
||||||
for (String line in lines) {
|
for (String line in lines) {
|
||||||
if (line == 'done') {
|
if (line == 'done' || line == 'all done') {
|
||||||
buildSubStatus?.stop();
|
buildSubStatus?.stop();
|
||||||
buildSubStatus = null;
|
buildSubStatus = null;
|
||||||
return null;
|
if (line == 'all done') {
|
||||||
|
// Free pipe file.
|
||||||
|
tempDir?.deleteSync(recursive: true);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
initialBuildStatus.cancel();
|
initialBuildStatus.cancel();
|
||||||
buildSubStatus = logger.startProgress(
|
buildSubStatus = logger.startProgress(
|
||||||
@ -480,11 +485,11 @@ Future<XcodeBuildResult> buildXcodeProject({
|
|||||||
workingDirectory: app.project.hostAppRoot.path,
|
workingDirectory: app.project.hostAppRoot.path,
|
||||||
allowReentrantFlutter: true
|
allowReentrantFlutter: true
|
||||||
);
|
);
|
||||||
|
// Notifies listener that no more output is coming.
|
||||||
|
scriptOutputPipeFile?.writeAsStringSync('all done');
|
||||||
buildSubStatus?.stop();
|
buildSubStatus?.stop();
|
||||||
initialBuildStatus?.cancel();
|
initialBuildStatus?.cancel();
|
||||||
buildStopwatch.stop();
|
buildStopwatch.stop();
|
||||||
// Free pipe file.
|
|
||||||
tempDir?.deleteSync(recursive: true);
|
|
||||||
printStatus(
|
printStatus(
|
||||||
'Xcode build done.'.padRight(kDefaultStatusPadding + 1)
|
'Xcode build done.'.padRight(kDefaultStatusPadding + 1)
|
||||||
+ '${getElapsedAsSeconds(buildStopwatch.elapsed).padLeft(5)}',
|
+ '${getElapsedAsSeconds(buildStopwatch.elapsed).padLeft(5)}',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user