blob: 05f8243524a3ec5c65524da93a3b277d00d94acb [file] [log] [blame]
// Copyright 2020 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd.
import 'package:args/args.dart';
import 'package:args/command_runner.dart';
import 'package:devtools_tool/commands/build.dart';
import 'package:devtools_tool/commands/fix_goldens.dart';
import 'package:devtools_tool/commands/generate_code.dart';
import 'package:devtools_tool/commands/release_notes_helper.dart';
import 'package:devtools_tool/commands/run.dart';
import 'package:devtools_tool/commands/serve.dart';
import 'package:devtools_tool/commands/sync.dart';
import 'package:devtools_tool/commands/tag_version.dart';
import 'package:devtools_tool/commands/update_flutter_sdk.dart';
import 'package:devtools_tool/commands/update_perfetto.dart';
import 'package:devtools_tool/model.dart';
import 'commands/analyze.dart';
import 'commands/list.dart';
import 'commands/pub_get.dart';
import 'commands/release_helper.dart';
import 'commands/repo_check.dart';
import 'commands/rollback.dart';
import 'commands/update_dart_sdk_deps.dart';
import 'commands/update_version.dart';
const _flutterFromPathFlag = 'flutter-from-path';
const _flutterSdkPathFlag = 'flutter-sdk-path';
class DevToolsCommandRunner extends CommandRunner {
DevToolsCommandRunner()
: super('dt', 'A repo management tool for DevTools.') {
addCommand(AnalyzeCommand());
addCommand(BuildCommand());
addCommand(FixGoldensCommand());
addCommand(GenerateCodeCommand());
addCommand(ListCommand());
addCommand(PubGetCommand());
addCommand(ReleaseHelperCommand());
addCommand(ReleaseNotesCommand());
addCommand(RepoCheckCommand());
addCommand(RollbackCommand());
addCommand(RunCommand());
addCommand(ServeCommand());
addCommand(SyncCommand());
addCommand(TagVersionCommand());
addCommand(UpdateDartSdkDepsCommand());
addCommand(UpdateDevToolsVersionCommand());
addCommand(UpdateFlutterSdkCommand());
addCommand(UpdatePerfettoCommand());
argParser
..addFlag(
_flutterFromPathFlag,
abbr: 'p',
negatable: false,
help:
'Use the Flutter SDK on PATH for any `flutter`, `dart` and '
'`dt` commands spawned by this process, instead of the '
'Flutter SDK from tool/flutter-sdk which is used by default. '
'This is incompatible with the `$_flutterSdkPathFlag` flag.',
)
..addOption(
_flutterSdkPathFlag,
help:
'Use the Flutter SDK from the specified path for any `flutter`, '
'`dart`, and `dt` commands spawned by this process, instead of the '
'Flutter SDK from tool/flutter-sdk which is used by default. '
'This is incompatible with the `$_flutterFromPathFlag` flag.',
);
}
@override
Future<void> runCommand(ArgResults topLevelResults) {
if (topLevelResults.flag(_flutterFromPathFlag) &&
topLevelResults.wasParsed(_flutterSdkPathFlag)) {
throw ArgParserException(
'Only one of `$_flutterFromPathFlag` and `$_flutterSdkPathFlag` may be passed',
);
}
if (topLevelResults.wasParsed(_flutterSdkPathFlag)) {
FlutterSdk.useFromPath(topLevelResults.option(_flutterSdkPathFlag)!);
} else if (topLevelResults.flag(_flutterFromPathFlag)) {
FlutterSdk.useFromPathEnvironmentVariable();
} else {
FlutterSdk.useFromCurrentVm();
}
print('Using Flutter SDK from ${FlutterSdk.current.sdkPath}');
return super.runCommand(topLevelResults);
}
}