run method
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
@override
Future<int> run(Iterable<String> args) async {
final logger = locator<LoggerService>();
try {
final argResults = parse(args);
if (argResults['json'] == true) {
logger.enableJsonOutput();
} else if (argResults['quiet'] == true) {
logger.setLogLevel(Level.quiet);
} else if (argResults['verbose'] == true) {
logger.setLogLevel(Level.verbose);
}
return await runCommand(argResults) ?? 0;
} on FormatException catch (e) {
logger.error(e.message);
logger.info(usage);
return 64; // usage error
} on UsageException catch (e) {
logger.error(e.message);
logger.info(e.usage);
return 64; // usage error
} on CliException catch (e) {
logger.error(e.message, e.cause, e.stackTrace);
return e.exitCode;
} catch (e, stackTrace) {
logger.error('An unexpected error occurred.', e, stackTrace);
return 1;
}
}