run method

  1. @override
void run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
void run() {
  final ftRun = runner as FtRunner;
  final v = ftRun.ftVerbose;
  final logger = ftRun.ftLogger;

  late final String source;
  late final bool viaShell;
  late final bool expandPath;
  late final bool exitOnNonzore;
  late final List<String> blocks;
  late final Map<String, List<String>> blockMap;
  late final String delay;
  try {
    final args = globalResults?.arguments ?? [];
    final config = configFromArgParse(ftRun.argParser, args);
    final define = getDefine(config, globalResults);
    final shvar = _getShellVar(config);
    define.addAll(shvar);
    final env = {...Platform.environment, ...define};
    ftRun
      ..ftConfig = config
      ..ftDefine = define
      ..ftEnv = env
      ..ftErrExit =
          getFlag('errexit', config, defaultTo: true, gRes: globalResults);

    source = getSource(ftRun.ftConfig, globalResults,
        aRes: argResults, env: ftRun.ftEnv);

    viaShell = getFlag('$name.via_shell', ftRun.ftConfig,
        aRes: argResults, defaultTo: true);
    expandPath = getFlag('$name.expand_path', ftRun.ftConfig,
        aRes: argResults, defaultTo: true);
    exitOnNonzore = getFlag('$name.exit_on_nonzore', ftRun.ftConfig,
        aRes: argResults, defaultTo: false);

    blocks = getOpitons('blocks', config, aRes: argResults);
    blockMap = getShellBlock(ftRun.ftConfig, ftRun.ftEnv, source, blocks);
    delay =
        getOpiton('delay', ftRun.ftConfig, aRes: argResults, defaultTo: '1');
  } on UsageException catch (_, __) {
    rethrow;
  } catch (e) {
    throw UsageException(e.toString(), '');
  }

  if (v) logger.trace('i, source:$source');

  for (var block in blocks) {
    var commands = blockMap[block] ?? [];
    if (commands.isEmpty) break;

    runScriptSync(
      block,
      commands,
      ftRun,
      source, // workdir
      viaShell: viaShell,
      expandPath: expandPath,
      exitOnNonzore: exitOnNonzore,
    );

    if (block.length > 1) sleep(Duration(seconds: int.tryParse(delay) ?? 1));
  }
}