| // Copyright 2015 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 'package:args/args.dart'; |
| import 'package:args/command_runner.dart'; |
| import 'package:logging/logging.dart'; |
| import 'package:sky_tools/src/application_package.dart'; |
| import 'package:sky_tools/src/artifacts.dart'; |
| import 'package:sky_tools/src/build.dart'; |
| import 'package:sky_tools/src/cache.dart'; |
| import 'package:sky_tools/src/init.dart'; |
| import 'package:sky_tools/src/install.dart'; |
| import 'package:sky_tools/src/list.dart'; |
| import 'package:sky_tools/src/listen.dart'; |
| import 'package:sky_tools/src/logs.dart'; |
| import 'package:sky_tools/src/run_mojo.dart'; |
| import 'package:sky_tools/src/start.dart'; |
| import 'package:sky_tools/src/stop.dart'; |
| import 'package:sky_tools/src/trace.dart'; |
| |
| class FlutterCommandRunner extends CommandRunner { |
| FlutterCommandRunner() |
| : super('flutter', 'Manage your Flutter app development.') { |
| argParser.addFlag('verbose', |
| abbr: 'v', |
| negatable: false, |
| help: 'Noisy logging, including all shell commands executed.'); |
| argParser.addFlag('very-verbose', |
| negatable: false, |
| help: 'Very noisy logging, including the output of all ' |
| 'shell commands executed.'); |
| |
| argParser.addSeparator('Global build selection options:'); |
| argParser.addFlag('debug', |
| negatable: false, |
| help: |
| 'Set this if you are building Sky locally and want to use the debug build products. ' |
| 'When set, attempts to automaticaly determine sky-src-path if sky-src-path is ' |
| 'not set. Not normally required.'); |
| argParser.addFlag('release', |
| negatable: false, |
| help: |
| 'Set this if you are building Sky locally and want to use the release build products. ' |
| 'When set, attempts to automaticaly determine sky-src-path if sky-src-path is ' |
| 'not set. Note that release is not compatible with the listen command ' |
| 'on iOS devices and simulators. Not normally required.'); |
| argParser.addOption('sky-src-path', |
| help: |
| 'Path to your Sky src directory, if you are building Sky locally. ' |
| 'Ignored if neither debug nor release is set. Not normally required.'); |
| argParser.addOption('android-debug-build-path', |
| help: |
| 'Path to your Android Debug out directory, if you are building Sky locally. ' |
| 'This path is relative to sky-src-path. Not normally required.', |
| defaultsTo: 'out/android_Debug/'); |
| argParser.addOption('android-release-build-path', |
| help: |
| 'Path to your Android Release out directory, if you are building Sky locally. ' |
| 'This path is relative to sky-src-path. Not normally required.', |
| defaultsTo: 'out/android_Release/'); |
| argParser.addOption('ios-debug-build-path', |
| help: |
| 'Path to your iOS Debug out directory, if you are building Sky locally. ' |
| 'This path is relative to sky-src-path. Not normally required.', |
| defaultsTo: 'out/ios_Debug/'); |
| argParser.addOption('ios-release-build-path', |
| help: |
| 'Path to your iOS Release out directory, if you are building Sky locally. ' |
| 'This path is relative to sky-src-path. Not normally required.', |
| defaultsTo: 'out/ios_Release/'); |
| argParser.addOption('ios-sim-debug-build-path', |
| help: |
| 'Path to your iOS Simulator Debug out directory, if you are building Sky locally. ' |
| 'This path is relative to sky-src-path. Not normally required.', |
| defaultsTo: 'out/ios_sim_Debug/'); |
| argParser.addOption('ios-sim-release-build-path', |
| help: |
| 'Path to your iOS Simulator Release out directory, if you are building Sky locally. ' |
| 'This path is relative to sky-src-path. Not normally required.', |
| defaultsTo: 'out/ios_sim_Release/'); |
| argParser.addOption('package-root', |
| help: 'Path to your packages directory.', defaultsTo: 'packages'); |
| } |
| |
| Future<int> runCommand(ArgResults topLevelResults) async { |
| if (topLevelResults['verbose']) { |
| Logger.root.level = Level.INFO; |
| } |
| |
| if (topLevelResults['very-verbose']) { |
| Logger.root.level = Level.FINE; |
| } |
| |
| _setupPaths(topLevelResults); |
| |
| return super.runCommand(topLevelResults); |
| } |
| |
| void _setupPaths(ArgResults results) { |
| ArtifactStore.packageRoot = results['package-root']; |
| if (results['debug'] || results['release']) { |
| if (results['sky-src-path'] == null) { |
| // TODO(iansf): Figure out how to get the default src path |
| assert(false); |
| } |
| ApplicationPackageFactory.srcPath = results['sky-src-path']; |
| } else { |
| assert(false); |
| // TODO(iansf): set paths up for commands using PREBUILT binaries |
| // ApplicationPackageFactory.setBuildPath(BuildType.PREBUILT, |
| // BuildPlatform.android, results['android-debug-build-path']); |
| } |
| |
| if (results['debug']) { |
| ApplicationPackageFactory.defaultBuildType = BuildType.debug; |
| ApplicationPackageFactory.setBuildPath(BuildType.debug, |
| BuildPlatform.android, results['android-debug-build-path']); |
| ApplicationPackageFactory.setBuildPath( |
| BuildType.debug, BuildPlatform.iOS, results['ios-debug-build-path']); |
| ApplicationPackageFactory.setBuildPath(BuildType.debug, |
| BuildPlatform.iOSSimulator, results['ios-sim-debug-build-path']); |
| } |
| if (results['release']) { |
| ApplicationPackageFactory.defaultBuildType = BuildType.release; |
| ApplicationPackageFactory.setBuildPath(BuildType.release, |
| BuildPlatform.android, results['android-release-build-path']); |
| ApplicationPackageFactory.setBuildPath(BuildType.release, |
| BuildPlatform.iOS, results['ios-release-build-path']); |
| ApplicationPackageFactory.setBuildPath(BuildType.release, |
| BuildPlatform.iOSSimulator, results['ios-sim-release-build-path']); |
| } |
| } |
| } |
| |
| void main(List<String> args) { |
| Logger.root.level = Level.WARNING; |
| Logger.root.onRecord.listen((LogRecord rec) { |
| print('${rec.level.name}: ${rec.message}'); |
| if (rec.error != null) { |
| print(rec.error); |
| } |
| if (rec.stackTrace != null) { |
| print(rec.stackTrace); |
| } |
| }); |
| |
| new FlutterCommandRunner() |
| ..addCommand(new BuildCommand()) |
| ..addCommand(new CacheCommand()) |
| ..addCommand(new InitCommand()) |
| ..addCommand(new InstallCommand()) |
| ..addCommand(new ListCommand()) |
| ..addCommand(new ListenCommand()) |
| ..addCommand(new LogsCommand()) |
| ..addCommand(new RunMojoCommand()) |
| ..addCommand(new StartCommand()) |
| ..addCommand(new StopCommand()) |
| ..addCommand(new TraceCommand()) |
| ..run(args); |
| } |