diff --git a/packages/pigeon/tool/shared/process_utils.dart b/packages/pigeon/tool/shared/process_utils.dart index 28c816f18b..e38a4af777 100644 --- a/packages/pigeon/tool/shared/process_utils.dart +++ b/packages/pigeon/tool/shared/process_utils.dart @@ -16,13 +16,29 @@ Future runProcess(String command, List arguments, mode: streamOutput ? ProcessStartMode.inheritStdio : ProcessStartMode.normal, ); + + if (streamOutput) { + return process.exitCode; + } + + final List stdoutBuffer = []; + final List stderrBuffer = []; + final Future stdoutFuture = process.stdout.forEach(stdoutBuffer.addAll); + final Future stderrFuture = process.stderr.forEach(stderrBuffer.addAll); final int exitCode = await process.exitCode; + await Future.wait(>[ + stdoutFuture, + stderrFuture, + ]); + if (exitCode != 0 && logFailure) { // ignore: avoid_print print('$command $arguments failed:'); + stdout.add(stdoutBuffer); + stderr.add(stderrBuffer); await Future.wait(>[ - process.stdout.pipe(stdout), - process.stderr.pipe(stderr), + stdout.flush(), + stderr.flush(), ]); } return exitCode;