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
|
// splitting each one into each component license (so that we can
|
||||||
// de-dupe if possible).
|
// de-dupe if possible).
|
||||||
final Set<String> packageLicenses = new Set<String>();
|
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) {
|
for (Uri package in packages) {
|
||||||
if (package != null && package.scheme == 'file') {
|
if (package != null && package.scheme == 'file') {
|
||||||
final File file = new File.fromUri(package.resolve('../LICENSE'));
|
final File file = new File.fromUri(package.resolve('../LICENSE'));
|
||||||
|
@ -114,17 +114,13 @@ class Observatory {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Response> reloadSources(String isolateId) async {
|
Future<Null> 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));
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await sendRequest('_reloadSources', <String, dynamic>{ 'isolateId': isolateId });
|
await sendRequest('_reloadSources',
|
||||||
return await whenIsolateReloads.future.timeout(new Duration(seconds: 20));
|
<String, dynamic>{ 'isolateId': isolateId });
|
||||||
} finally {
|
return null;
|
||||||
await sub.cancel();
|
} catch (e) {
|
||||||
|
return new Future<Null>.error(e.data['details']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,13 +378,14 @@ class RunAndStayResident {
|
|||||||
await _updateDevFS();
|
await _updateDevFS();
|
||||||
}
|
}
|
||||||
Status reloadStatus = logger.startProgress('Performing hot reload');
|
Status reloadStatus = logger.startProgress('Performing hot reload');
|
||||||
Event result = await observatory.reloadSources(observatory.firstIsolateId);
|
try {
|
||||||
|
await observatory.reloadSources(observatory.firstIsolateId);
|
||||||
|
} catch (errorMessage) {
|
||||||
reloadStatus.stop(showElapsedTime: true);
|
reloadStatus.stop(showElapsedTime: true);
|
||||||
dynamic error = result.response['reloadError'];
|
printError('Hot reload was rejected:\n$errorMessage');
|
||||||
if (error != null) {
|
|
||||||
printError('Error reloading application sources: $error');
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
reloadStatus.stop(showElapsedTime: true);
|
||||||
Status reassembleStatus =
|
Status reassembleStatus =
|
||||||
logger.startProgress('Reassembling application');
|
logger.startProgress('Reassembling application');
|
||||||
await observatory.flutterReassemble(observatory.firstIsolateId);
|
await observatory.flutterReassemble(observatory.firstIsolateId);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user