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