| // 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 'dart:io'; | |
| 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/presubmit.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 _flutterFromPathEnvVar = 'DEVTOOLS_TOOL_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(PresubmitCommand()); | |
| 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. ' | |
| 'Can also be enabled via the `$_flutterFromPathEnvVar` ' | |
| 'environment variable.', | |
| ) | |
| ..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) { | |
| final flutterFromPathEnvValue = | |
| Platform.environment[_flutterFromPathEnvVar] ?? ''; | |
| final flutterFromPathEnv = | |
| bool.tryParse(flutterFromPathEnvValue, caseSensitive: false) == true; | |
| 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) || | |
| flutterFromPathEnv) { | |
| FlutterSdk.useFromPathEnvironmentVariable(); | |
| } else { | |
| FlutterSdk.useFromCurrentVm(); | |
| } | |
| print('Using Flutter SDK from ${FlutterSdk.current.sdkPath}'); | |
| return super.runCommand(topLevelResults); | |
| } | |
| } |