| // Copyright 2016 The Chromium 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 'dart:async'; |
| |
| import '../base/common.dart'; |
| import '../doctor.dart'; |
| import '../runner/flutter_command.dart'; |
| |
| class DoctorCommand extends FlutterCommand { |
| DoctorCommand({this.verbose = false}) { |
| argParser.addFlag('android-licenses', |
| defaultsTo: false, |
| negatable: false, |
| help: 'Run the Android SDK manager tool to accept the SDK\'s licenses.', |
| ); |
| argParser.addOption('check-for-remote-artifacts', |
| hide: !verbose, |
| help: 'Used to determine if Flutter engine artifacts for all platforms ' |
| 'are available for download.', |
| valueHelp: 'engine revision git hash',); |
| } |
| |
| final bool verbose; |
| |
| @override |
| final String name = 'doctor'; |
| |
| @override |
| final String description = 'Show information about the installed tooling.'; |
| |
| @override |
| Future<Set<DevelopmentArtifact>> get requiredArtifacts async { |
| return <DevelopmentArtifact>{ |
| DevelopmentArtifact.universal, |
| // This is required because we use gen_snapshot to check if the host |
| // machine can execute the provided artifacts. See `_genSnapshotRuns` |
| // in `doctor.dart`. |
| DevelopmentArtifact.android, |
| }; |
| } |
| |
| @override |
| Future<FlutterCommandResult> runCommand() async { |
| if (argResults.wasParsed('check-for-remote-artifacts')) { |
| final String engineRevision = argResults['check-for-remote-artifacts']; |
| if (engineRevision.startsWith(RegExp(r'[a-f0-9]{1,40}'))) { |
| final bool success = await doctor.checkRemoteArtifacts(engineRevision); |
| if (!success) { |
| throwToolExit('Artifacts for engine $engineRevision are missing or are ' |
| 'not yet available.', exitCode: 1); |
| } |
| } else { |
| throwToolExit('Remote artifact revision $engineRevision is not a valid ' |
| 'git hash.'); |
| } |
| } |
| final bool success = await doctor.diagnose(androidLicenses: argResults['android-licenses'], verbose: verbose); |
| return FlutterCommandResult(success ? ExitStatus.success : ExitStatus.warning); |
| } |
| } |