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 String target;
late final bool relative;
late final int tail;
try {
_setFtRunner(ftRun, globalResults);
source = getSource(ftRun.ftConfig, globalResults,
aRes: argResults, env: ftRun.ftEnv);
target = getTarget('$name.target', ftRun.ftConfig,
aRes: argResults, env: ftRun.ftEnv, source: source);
tail =
getInt('$name.tail', ftRun.ftConfig, aRes: argResults, defaultTo: 0);
relative = getFlag('$name.relative', ftRun.ftConfig,
aRes: argResults, defaultTo: true);
} on UsageException catch (_, __) {
rethrow;
} catch (e) {
throw UsageException(e.toString(), '');
}
if (v) _traceGlobalParam(logger, ftRun, source);
final action = BasicPathAction(
source,
pattern: ftRun.ftPattern,
excludes: ftRun.ftExcludes,
mimeOverrides: ftRun.ftMimeOverrides,
mimeIncludes: ftRun.ftMimeIncludes,
mimeExcludes: ftRun.ftMimeExcludes,
sizes: ftRun.ftSizes,
times: ftRun.ftTimes,
env: ftRun.ftEnv,
verbose: ftRun.ftVerbose,
cancelOnError: ftRun.ftErrExit,
statTimeType: StatTimeType.values.byName(ftRun.ftTimeType),
)
..logger = logger
..fmtFields = ftRun.ftFields;
final err = action.validator(target: target);
if (err.isNotEmpty) throw UsageException('err: chk, $err', '');
action.argErr = err;
final srcPath = action.path;
String dstPath = target;
if (tail > 0) dstPath = p.join(target, pathtail(srcPath, tail));
if (v) logger.trace('i, relative:$relative, tail:$tail, target:$dstPath');
final toDir = Directory(dstPath);
final isWritable = isDirWritable(toDir);
if (!isWritable) {
throw UsageException('err: not writable. $dstPath', '');
}
action.unarchive(toDir, relative, isWritable);
}