Commit ed2877c0 authored by James Robinson's avatar James Robinson

Add --checked flag to mojo_run that runs sky_viewer in checked mode

Also refactors the command line assembling to make a bit more sense.

Fixes #53
parent 9996d425
...@@ -7,7 +7,6 @@ library sky_tools.run_mojo; ...@@ -7,7 +7,6 @@ library sky_tools.run_mojo;
import 'dart:async'; import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:args/args.dart';
import 'package:args/command_runner.dart'; import 'package:args/command_runner.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
...@@ -17,11 +16,14 @@ import 'process.dart'; ...@@ -17,11 +16,14 @@ import 'process.dart';
final Logger _logging = new Logger('sky_tools.run_mojo'); final Logger _logging = new Logger('sky_tools.run_mojo');
enum _MojoConfig { Debug, Release }
class RunMojoCommand extends Command { class RunMojoCommand extends Command {
final name = 'run_mojo'; final name = 'run_mojo';
final description = 'Run a Flutter app in mojo.'; final description = 'Run a Flutter app in mojo.';
RunMojoCommand() { RunMojoCommand() {
argParser.addFlag('android', negatable: false, help: 'Run on an Android device'); argParser.addFlag('android', negatable: false, help: 'Run on an Android device');
argParser.addFlag('checked', negatable: false, help: 'Run Flutter in checked mode');
argParser.addFlag('mojo-debug', negatable: false, help: 'Use Debug build of mojo'); argParser.addFlag('mojo-debug', negatable: false, help: 'Use Debug build of mojo');
argParser.addFlag('mojo-release', negatable: false, help: 'Use Release build of mojo (default)'); argParser.addFlag('mojo-release', negatable: false, help: 'Use Release build of mojo (default)');
...@@ -38,12 +40,12 @@ class RunMojoCommand extends Command { ...@@ -38,12 +40,12 @@ class RunMojoCommand extends Command {
return file.absolute.path; return file.absolute.path;
} }
Future<int> _runAndroid(ArgResults results, String appPath) async { Future<int> _runAndroid(String mojoPath, _MojoConfig mojoConfig, String appPath, List<String> additionalArgs) async {
String skyViewerUrl = ArtifactStore.googleStorageUrl('viewer', 'android-arm'); String skyViewerUrl = ArtifactStore.googleStorageUrl('viewer', 'android-arm');
String command = await _makePathAbsolute(path.join(results['mojo-path'], 'mojo', 'devtools', 'common', 'mojo_run')); String command = await _makePathAbsolute(path.join(mojoPath, 'mojo', 'devtools', 'common', 'mojo_run'));
String appName = path.basename(appPath); String appName = path.basename(appPath);
String appDir = path.dirname(appPath); String appDir = path.dirname(appPath);
String buildFlag = argResults['mojo-debug'] ? '--debug' : '--release'; String buildFlag = mojoConfig == _MojoConfig.Debug ? '--debug' : '--release';
List<String> args = [ List<String> args = [
'--android', '--android',
buildFlag, buildFlag,
...@@ -58,19 +60,19 @@ class RunMojoCommand extends Command { ...@@ -58,19 +60,19 @@ class RunMojoCommand extends Command {
args.add('--verbose'); args.add('--verbose');
} }
} }
args.addAll(results.rest); args.addAll(additionalArgs);
return runCommandAndStreamOutput(command, args); return runCommandAndStreamOutput(command, args);
} }
Future<int> _runLinux(ArgResults results, String appPath) async { Future<int> _runLinux(String mojoPath, _MojoConfig mojoConfig, String appPath, List<String> additionalArgs) async {
String viewerPath = await _makePathAbsolute(await ArtifactStore.getPath(Artifact.SkyViewerMojo)); String viewerPath = await _makePathAbsolute(await ArtifactStore.getPath(Artifact.SkyViewerMojo));
String mojoBuildType = argResults['mojo-debug'] ? 'Debug' : 'Release'; String mojoBuildType = mojoConfig == _MojoConfig.Debug ? 'Debug' : 'Release';
String mojoShellPath = await _makePathAbsolute(path.join(results['mojo-path'], 'out', mojoBuildType, 'mojo_shell')); String mojoShellPath = await _makePathAbsolute(path.join(mojoPath, 'out', mojoBuildType, 'mojo_shell'));
List<String> args = [ List<String> args = [
'file://${appPath}', 'file://${appPath}',
'--url-mappings=mojo:sky_viewer=file://${viewerPath}' '--url-mappings=mojo:sky_viewer=file://${viewerPath}'
]; ];
args.addAll(results.rest); args.addAll(additionalArgs);
return runCommandAndStreamOutput(mojoShellPath, args); return runCommandAndStreamOutput(mojoShellPath, args);
} }
...@@ -84,11 +86,18 @@ class RunMojoCommand extends Command { ...@@ -84,11 +86,18 @@ class RunMojoCommand extends Command {
_logging.severe('Cannot specify both --mojo-debug and --mojo-release'); _logging.severe('Cannot specify both --mojo-debug and --mojo-release');
return 1; return 1;
} }
List<String> args = [];
if (argResults['checked']) {
args.add('--args-for=mojo:sky_viewer --enable-checked-mode');
}
String mojoPath = argResults['mojo-path'];
_MojoConfig mojoConfig = argResults['mojo-debug'] ? _MojoConfig.Debug : _MojoConfig.Release;
String appPath = await _makePathAbsolute(argResults['app']); String appPath = await _makePathAbsolute(argResults['app']);
if (argResults['android']) { if (argResults['android']) {
return _runAndroid(argResults, appPath); return _runAndroid(mojoPath, mojoConfig, appPath, args);
} else { } else {
return _runLinux(argResults, appPath); return _runLinux(mojoPath, mojoConfig, appPath, args);
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment