runScriptSync method

void runScriptSync(
  1. String blockName,
  2. List<String> commands,
  3. FtRunner ftRun,
  4. String workdir, {
  5. bool viaShell = true,
  6. bool expandPath = true,
  7. bool exitOnNonzore = true,
})

Implementation

void runScriptSync(
  String blockName,
  List<String> commands,
  FtRunner ftRun,
  String workdir, {
  bool viaShell = true,
  bool expandPath = true,
  bool exitOnNonzore = true,
}) {
  var workenv = ftRun.ftEnv;
  var logger = ftRun.ftLogger;
  // final lpm = LocalProcessManager();
  for (var cmd in commands) {
    logger.trace('i, block:$blockName, cmd:$cmd');
    cmd = expandVar(cmd.trim(), map: ftRun.ftEnv);

    var parts = cmd.split(spaceDelimiter);
    var name = parts.first.trim();
    var args = parts.getRange(1, parts.length).map((e) => e.trim()).toList()
      ..removeWhere((e) => e.isEmpty);
    if (expandPath) {
      args = args.map((e) => expandTilde(e)).toList();
      // logger.trace('i, expandPath, args:$args');
    }

    var exec = name.toLowerCase();
    var progress = logger.progress(
        'i, block:$blockName, run:$name ${args.join(spaceDelimiter)} ');

    if (exec == 'cd') {
      if (args.isEmpty) {
        workdir = expandTilde('~');
      } else {
        var newdir = args.first.trim();
        if (newdir.startsWith('~')) newdir = expandTilde(newdir);
        workdir = p.normalize(newdir);
      }
      continue;
    }
    if (exec == 'set' || exec == 'export') {
      // workenv.addAll(parseCmdVar(cmd));
      continue;
    }

    try {
      var result = Process.runSync(
        name,
        args,
        workingDirectory: workdir,
        environment: workenv,
        runInShell: viaShell,
      );
      var code = result.exitCode;
      logger.trace('${code == 0 ? 'i' : 'e'}, exitcode:$code');
      if (code == 0) {
        logger.write(result.stdout);
      } else {
        logger.stderr(result.stderr);
        if (exitOnNonzore) {
          exitCode = ExitCodeExt.error.code;
          break;
        }
      }
    } on ProcessException catch (e, s) {
      logger
        ..stderr('$e')
        ..stderr(kIsDebug ? '$s' : '');
      if (ftRun.ftErrExit) {
        exitCode = ExitCodeExt.error.code;
        break;
      }
    } finally {
      progress.finish();
    }
  }
}