run method
- @Deprecated('Do not use this method directly. Use `safeRun` instead.')
- @protected
- @override
inherited
Parses args
and invokes Command.run
on the chosen command.
This always returns a Future in case the command is asynchronous. The
Future will throw a UsageException
if args
was invalid.
Implementation
@Deprecated('Do not use this method directly. Use `safeRun` instead.')
@protected
@override
Future<int> run(Iterable<String> args) async {
int exitCode;
try {
final p = parse(args);
final logLevel = p.option('log-level') ?? LogLevel.error.name;
logger.level = LogLevel.values.byName(logLevel);
logger.trace('log level set to $logLevel');
final result = await runCommand(p) ?? ExitCode.success.code;
exitCode = result;
} on FormatException catch (e) {
console
..write(errorAppDescription)
..writeMessage(e.message, style: MessageStyle.error)
..writeln('')
..write(usage);
logger.trace(e.toString());
exitCode = ExitCode.software.code;
} on UsageException catch (e) {
console
..write(errorAppDescription)
..write(console.theme.prefixError(''))
..write(console.theme.colors.error(e.message.trimRight()))
..write('\n')
// ..writeMessage(e.message, style: MessageStyle.error)
..write(e.usage);
logger.trace(e.message);
exitCode = ExitCode.usage.code;
} catch (e) {
console
..write(errorAppDescription)
..writeMessage(e.toString(), style: MessageStyle.error);
logger.trace(e.toString());
exitCode = ExitCode.software.code;
}
logger.flush();
stdout.write('\x1b[m');
return exitCode;
}