callProcess method
Implementation
Future callProcess(List<String> commands) async {
try {
var process = await Process.start(commands.first,
commands.length <= 1 ? [] : commands.getRange(1, commands.length).toList(),
runInShell: true);
final error = process.stderr.transform(utf8.decoder).map(output.red);
final success = process.stdout.transform(utf8.decoder).map(output.green);
await for (var line in Rx.merge([success, error])) {
print(line);
}
if (await process.exitCode == 0) {
output.success(commands.join(' '));
} else {
output.error(commands.join(' '));
exit(await process.exitCode);
}
} catch (error) {
output.error(commands.join(' '));
exit(1);
}
}