callProcess method

Future callProcess(
  1. List<String> commands
)

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);
  }
}