Merge pull request #4998 from johnmccutchan/hot_catch_reload_failures
Fix hot reload failure handling
This commit is contained in:
commit
3871b0eb2a
@ -211,7 +211,7 @@ ZipEntry _obtainLicenses(
|
||||
// splitting each one into each component license (so that we can
|
||||
// de-dupe if possible).
|
||||
final Set<String> packageLicenses = new Set<String>();
|
||||
final List<Uri> packages = packageMap.map.values;
|
||||
final Iterable<Uri> packages = packageMap.map.values;
|
||||
for (Uri package in packages) {
|
||||
if (package != null && package.scheme == 'file') {
|
||||
final File file = new File.fromUri(package.resolve('../LICENSE'));
|
||||
|
@ -114,17 +114,13 @@ class Observatory {
|
||||
});
|
||||
}
|
||||
|
||||
Future<Response> reloadSources(String isolateId) async {
|
||||
Completer<Event> whenIsolateReloads = new Completer<Event>();
|
||||
StreamSubscription<Event> sub = onIsolateEvent
|
||||
.where((Event event) => event.kind == 'IsolateReload')
|
||||
.listen((Event event) => whenIsolateReloads.complete(event));
|
||||
|
||||
Future<Null> reloadSources(String isolateId) async {
|
||||
try {
|
||||
await sendRequest('_reloadSources', <String, dynamic>{ 'isolateId': isolateId });
|
||||
return await whenIsolateReloads.future.timeout(new Duration(seconds: 20));
|
||||
} finally {
|
||||
await sub.cancel();
|
||||
await sendRequest('_reloadSources',
|
||||
<String, dynamic>{ 'isolateId': isolateId });
|
||||
return null;
|
||||
} catch (e) {
|
||||
return new Future<Null>.error(e.data['details']);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -378,13 +378,14 @@ class RunAndStayResident {
|
||||
await _updateDevFS();
|
||||
}
|
||||
Status reloadStatus = logger.startProgress('Performing hot reload');
|
||||
Event result = await observatory.reloadSources(observatory.firstIsolateId);
|
||||
reloadStatus.stop(showElapsedTime: true);
|
||||
dynamic error = result.response['reloadError'];
|
||||
if (error != null) {
|
||||
printError('Error reloading application sources: $error');
|
||||
try {
|
||||
await observatory.reloadSources(observatory.firstIsolateId);
|
||||
} catch (errorMessage) {
|
||||
reloadStatus.stop(showElapsedTime: true);
|
||||
printError('Hot reload was rejected:\n$errorMessage');
|
||||
return false;
|
||||
}
|
||||
reloadStatus.stop(showElapsedTime: true);
|
||||
Status reassembleStatus =
|
||||
logger.startProgress('Reassembling application');
|
||||
await observatory.flutterReassemble(observatory.firstIsolateId);
|
||||
|
Loading…
x
Reference in New Issue
Block a user