blob: a17291246ceed500006a2f90f7e9f41fd7406182 [file] [log] [blame]
// 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<int> runProcess(
String command,
List<String> args, {
String? cwd,
bool failOnError = true,
bool verbose = true,
List<String>? 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;
}