Unverified Commit d6d87447 authored by Zachary Anderson's avatar Zachary Anderson Committed by GitHub

[fuchsia] Fixes for Fuchsia hot reload (#16317)

parent 037a4aef
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
import 'dart:async'; import 'dart:async';
import 'dart:collection'; import 'dart:collection';
import 'dart:convert';
import '../base/common.dart'; import '../base/common.dart';
import '../base/file_system.dart'; import '../base/file_system.dart';
...@@ -41,6 +42,10 @@ class FuchsiaReloadCommand extends FlutterCommand { ...@@ -41,6 +42,10 @@ class FuchsiaReloadCommand extends FlutterCommand {
argParser.addOption('gn-target', argParser.addOption('gn-target',
abbr: 'g', abbr: 'g',
help: 'GN target of the application, e.g //path/to/app:app.'); help: 'GN target of the application, e.g //path/to/app:app.');
argParser.addOption('isolate-number',
abbr: 'i',
help: 'To reload only one instance, specify the isolate number, e.g. '
'the number in foo\$main-###### given by --list.');
argParser.addFlag('list', argParser.addFlag('list',
abbr: 'l', abbr: 'l',
defaultsTo: false, defaultsTo: false,
...@@ -48,10 +53,10 @@ class FuchsiaReloadCommand extends FlutterCommand { ...@@ -48,10 +53,10 @@ class FuchsiaReloadCommand extends FlutterCommand {
argParser.addOption('name-override', argParser.addOption('name-override',
abbr: 'n', abbr: 'n',
help: 'On-device name of the application binary.'); help: 'On-device name of the application binary.');
argParser.addOption('isolate-number', argParser.addFlag('preview-dart-2',
abbr: 'i', abbr: '2',
help: 'To reload only one instance, specify the isolate number, e.g. ' defaultsTo: false,
'the number in foo\$main-###### given by --list.'); help: 'Preview Dart 2.0 functionality.');
argParser.addOption('target', argParser.addOption('target',
abbr: 't', abbr: 't',
defaultsTo: flx.defaultMainPath, defaultsTo: flx.defaultMainPath,
...@@ -178,6 +183,8 @@ class FuchsiaReloadCommand extends FlutterCommand { ...@@ -178,6 +183,8 @@ class FuchsiaReloadCommand extends FlutterCommand {
printTrace('Looing for view $viewFilter'); printTrace('Looing for view $viewFilter');
final List<int> result = <int>[]; final List<int> result = <int>[];
for (FlutterView v in await _getViews(ports)) { for (FlutterView v in await _getViews(ports)) {
if (v.uiIsolate == null)
continue;
final Uri addr = v.owner.vmService.httpAddress; final Uri addr = v.owner.vmService.httpAddress;
printTrace('At $addr, found view: ${v.uiIsolate.name}'); printTrace('At $addr, found view: ${v.uiIsolate.name}');
if (v.uiIsolate.name.contains(viewFilter)) if (v.uiIsolate.name.contains(viewFilter))
...@@ -355,11 +362,15 @@ class FuchsiaReloadCommand extends FlutterCommand { ...@@ -355,11 +362,15 @@ class FuchsiaReloadCommand extends FlutterCommand {
return <String>[path, name]; return <String>[path, name];
} }
Future<List<_PortForwarder>> _forwardPorts(List<int> remotePorts) { Future<List<_PortForwarder>> _forwardPorts(List<int> remotePorts) async {
final String config = '$_buildDir/ssh-keys/ssh_config'; final String config = '$_buildDir/ssh-keys/ssh_config';
return Future.wait(remotePorts.map((int remotePort) { final List<_PortForwarder> forwarders = <_PortForwarder>[];
return _PortForwarder.start(config, _address, remotePort); for (int port in remotePorts) {
})); final _PortForwarder f =
await _PortForwarder.start(config, _address, port);
forwarders.add(f);
}
return forwarders;
} }
Future<List<int>> _getServicePorts() async { Future<List<int>> _getServicePorts() async {
...@@ -421,10 +432,14 @@ class _PortForwarder { ...@@ -421,10 +432,14 @@ class _PortForwarder {
return new _PortForwarder._(null, 0, 0, null, null); return new _PortForwarder._(null, 0, 0, null, null);
} }
final List<String> command = <String>[ final List<String> command = <String>[
'ssh', '-F', sshConfig, '-nNT', 'ssh', '-F', sshConfig, '-nNT', '-vvv',
'-L', '$localPort:$ipv4Loopback:$remotePort', address]; '-L', '$localPort:$ipv4Loopback:$remotePort', address];
printTrace("_PortForwarder running '${command.join(' ')}'"); printTrace("_PortForwarder running '${command.join(' ')}'");
final Process process = await processManager.start(command); final Process process = await processManager.start(command);
process.stderr
.transform(utf8.decoder)
.transform(const LineSplitter())
.listen((String data) { printTrace(data); });
process.exitCode.then((int c) { process.exitCode.then((int c) {
printTrace("'${command.join(' ')}' exited with exit code $c"); printTrace("'${command.join(' ')}' exited with exit code $c");
}); });
...@@ -440,7 +455,7 @@ class _PortForwarder { ...@@ -440,7 +455,7 @@ class _PortForwarder {
} }
// Cancel the forwarding request. // Cancel the forwarding request.
final List<String> command = <String>[ final List<String> command = <String>[
'ssh', '-F', _sshConfig, '-O', 'cancel', 'ssh', '-F', _sshConfig, '-O', 'cancel', '-vvv',
'-L', '$_localPort:$ipv4Loopback:$_remotePort', _remoteAddress]; '-L', '$_localPort:$ipv4Loopback:$_remotePort', _remoteAddress];
final ProcessResult result = await processManager.run(command); final ProcessResult result = await processManager.run(command);
printTrace(command.join(' ')); printTrace(command.join(' '));
......
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