getTarget function
get target input, order: define -> env -> yaml -> argResults -> rest last
Implementation
String getTarget(
String name,
Config config, {
ArgResults? aRes,
Map<String, String>? env,
String? source,
}) {
final orgiName = name;
String? target = config.optionalString(name);
if (name.contains(dotDelimiter)) name = name.split(dotDelimiter).last;
target ??= aRes?.option(name);
target ??= aRes?.rest.lastOrNull;
if (target == null || target.isEmpty) {
throw UsageException('err: required $name', '');
}
if ((target == '.' || target == '..') && orgiName.startsWith('archive')) {
target = p.basename(expandDotPath(target));
}
if (source != null && source == target) {
throw UsageException('err: invalid $name', '');
}
if (target.trimLeft().startsWith('~')) {
if (isWindows) target = target.replaceFirst('~', homePattern);
target = expandTilde(target);
}
if (target.contains(varInputRegexp) && env != null) {
target = expandVar(target, map: env);
}
if (target.contains(varInputRegexp)) {
throw UsageException('err: undef.var. $target', '');
}
// if (target.startsWith('.')) target = expandDotPath(target);
target = p.normalize(target);
return target;
}