blob: cf4bc92f83d54d799a02ba484540ca7b741f6ea1 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:args/command_runner.dart';
import 'package:engine_build_configs/engine_build_configs.dart';
import '../environment.dart';
import 'build_command.dart';
import 'fetch_command.dart';
import 'flags.dart';
import 'format_command.dart';
import 'lint_command.dart';
import 'query_command.dart';
import 'run_command.dart';
const int _usageLineLength = 80;
/// The root command runner.
final class ToolCommandRunner extends CommandRunner<int> {
/// Constructs the runner and populates commands, subcommands, and global
/// options and flags.
ToolCommandRunner({
required this.environment,
required this.configs,
}) : super(toolName, toolDescription, usageLineLength: _usageLineLength) {
final List<Command<int>> commands = <Command<int>>[
FetchCommand(environment: environment),
FormatCommand(environment: environment),
QueryCommand(environment: environment, configs: configs),
BuildCommand(environment: environment, configs: configs),
RunCommand(environment: environment, configs: configs),
LintCommand(environment: environment),
];
commands.forEach(addCommand);
argParser.addFlag(
verboseFlag,
abbr: 'v',
help: 'Prints verbose output',
negatable: false,
);
}
/// The name of the tool as reported in the tool's usage and help
/// messages.
static const String toolName = 'et';
/// The description of the tool reported in the tool's usage and help
/// messages.
static const String toolDescription = 'A command line tool for working on '
'the Flutter Engine.';
/// The host system environment.
final Environment environment;
/// Build configurations loaded from the engine from under ci/builders.
final Map<String, BuilderConfig> configs;
@override
Future<int> run(Iterable<String> args) async {
try {
return await runCommand(parse(args)) ?? 0;
} on FormatException catch (e) {
environment.logger.error(e);
return 1;
} on UsageException catch (e) {
environment.logger.error(e);
return 1;
}
}
}