// Copyright 2014 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. // @dart = 2.8 import 'dart:convert' show jsonDecode; import 'package:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:meta/meta.dart'; import 'package:platform/platform.dart'; import './proto/conductor_state.pb.dart' as pb; import './repository.dart'; import './state.dart'; import './stdio.dart'; const String kVerboseFlag = 'verbose'; const String kStateOption = 'state-file'; /// Command to print the status of the current Flutter release. class StatusCommand extends Command { StatusCommand({ @required this.checkouts, }) : platform = checkouts.platform, fileSystem = checkouts.fileSystem, stdio = checkouts.stdio { final String defaultPath = defaultStateFilePath(platform); argParser.addOption( kStateOption, defaultsTo: defaultPath, help: 'Path to persistent state file. Defaults to $defaultPath', ); argParser.addFlag( kVerboseFlag, abbr: 'v', defaultsTo: false, help: 'Also print logs.', ); } final Checkouts checkouts; final FileSystem fileSystem; final Platform platform; final Stdio stdio; @override String get name => 'status'; @override String get description => 'Print status of current release.'; @override void run() { final File stateFile = checkouts.fileSystem.file(argResults[kStateOption]); if (!stateFile.existsSync()) { stdio.printStatus( 'No persistent state file found at ${argResults[kStateOption]}.'); return; } final pb.ConductorState state = pb.ConductorState(); state.mergeFromProto3Json(jsonDecode(stateFile.readAsStringSync())); stdio.printStatus(presentState(state)); if (argResults[kVerboseFlag] as bool) { stdio.printStatus('\nLogs:'); state.logs.forEach(stdio.printStatus); } } }