// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'dart:convert'; import 'dart:io'; Future runProcess( String command, List args, { String? cwd, bool failOnError = true, bool verbose = true, List? stdout, }) async { if (verbose) { print('\n$command ${args.join(' ')}'); } var process = await Process.start(command, args, workingDirectory: cwd); process.stdout.transform(utf8.decoder).transform(LineSplitter()).listen(( line, ) { if (verbose) { print(' $line'); } if (stdout != null) { stdout.add(line); } }); process.stderr.transform(utf8.decoder).transform(LineSplitter()).listen(( line, ) { if (verbose) { print(' $line'); } }); var exitCode = await process.exitCode; if (exitCode != 0 && failOnError) { throw '$command exited with $exitCode'; } return exitCode; }