mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Handle compilation failures from web application (#38723)
This commit is contained in:
parent
7ed27b51a3
commit
ae29174560
@ -238,12 +238,18 @@ class ResidentWebRunner extends ResidentRunner {
|
|||||||
return OperationResult(1, 'Failed to recompile application.');
|
return OperationResult(1, 'Failed to recompile application.');
|
||||||
}
|
}
|
||||||
if (supportsServiceProtocol) {
|
if (supportsServiceProtocol) {
|
||||||
final vmservice.Response reloadResponse = await _vmService.callServiceExtension('hotRestart');
|
try {
|
||||||
status.stop();
|
final vmservice.Response reloadResponse = await _vmService.callServiceExtension('hotRestart');
|
||||||
printStatus('Restarted application in ${getElapsedAsMilliseconds(timer.elapsed)}.');
|
printStatus('Restarted application in ${getElapsedAsMilliseconds(timer.elapsed)}.');
|
||||||
return reloadResponse.type == 'Success'
|
return reloadResponse.type == 'Success'
|
||||||
? OperationResult.ok
|
? OperationResult.ok
|
||||||
: OperationResult(1, reloadResponse.toString());
|
: OperationResult(1, reloadResponse.toString());
|
||||||
|
} on vmservice.RPCError {
|
||||||
|
await _webFs.hardRefresh();
|
||||||
|
return OperationResult(1, 'Page requires full reload');
|
||||||
|
} finally {
|
||||||
|
status.stop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// If we're not in hot mode, the only way to restart is to reload the tab.
|
// If we're not in hot mode, the only way to restart is to reload the tab.
|
||||||
await _webFs.hardRefresh();
|
await _webFs.hardRefresh();
|
||||||
|
@ -319,23 +319,7 @@ class BuildDaemonCreator {
|
|||||||
'--define', 'flutter_tools:shell=flutterWebSdk=$flutterWebSdk',
|
'--define', 'flutter_tools:shell=flutterWebSdk=$flutterWebSdk',
|
||||||
],
|
],
|
||||||
logHandler: (ServerLog serverLog) {
|
logHandler: (ServerLog serverLog) {
|
||||||
switch (serverLog.level) {
|
printTrace(serverLog.message);
|
||||||
case Level.CONFIG:
|
|
||||||
case Level.FINE:
|
|
||||||
case Level.FINER:
|
|
||||||
case Level.FINEST:
|
|
||||||
case Level.INFO:
|
|
||||||
printTrace(serverLog.message);
|
|
||||||
break;
|
|
||||||
case Level.SEVERE:
|
|
||||||
case Level.SHOUT:
|
|
||||||
printError(
|
|
||||||
serverLog?.error ?? '',
|
|
||||||
stackTrace: serverLog.stackTrace != null
|
|
||||||
? StackTrace.fromString(serverLog?.stackTrace)
|
|
||||||
: null,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
buildMode: daemon.BuildMode.Manual,
|
buildMode: daemon.BuildMode.Manual,
|
||||||
);
|
);
|
||||||
|
@ -61,6 +61,9 @@ void main() {
|
|||||||
when(mockWebFs.runAndDebug()).thenAnswer((Invocation _) async {
|
when(mockWebFs.runAndDebug()).thenAnswer((Invocation _) async {
|
||||||
return mockDebugConnection;
|
return mockDebugConnection;
|
||||||
});
|
});
|
||||||
|
when(mockWebFs.recompile()).thenAnswer((Invocation _) {
|
||||||
|
return Future<bool>.value(false);
|
||||||
|
});
|
||||||
when(mockDebugConnection.vmService).thenReturn(mockVmService);
|
when(mockDebugConnection.vmService).thenReturn(mockVmService);
|
||||||
when(mockVmService.onStdoutEvent).thenAnswer((Invocation _) {
|
when(mockVmService.onStdoutEvent).thenAnswer((Invocation _) {
|
||||||
return const Stream<Event>.empty();
|
return const Stream<Event>.empty();
|
||||||
@ -165,6 +168,23 @@ void main() {
|
|||||||
expect(result.message, contains('Failed'));
|
expect(result.message, contains('Failed'));
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
test('Fails on vmservice RpcError', () => testbed.run(() async {
|
||||||
|
_setupMocks();
|
||||||
|
final Completer<DebugConnectionInfo> connectionInfoCompleter = Completer<DebugConnectionInfo>();
|
||||||
|
unawaited(residentWebRunner.run(
|
||||||
|
connectionInfoCompleter: connectionInfoCompleter,
|
||||||
|
));
|
||||||
|
await connectionInfoCompleter.future;
|
||||||
|
when(mockWebFs.recompile()).thenAnswer((Invocation _) async {
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
when(mockVmService.callServiceExtension('hotRestart')).thenThrow(RPCError('', 2, '123'));
|
||||||
|
final OperationResult result = await residentWebRunner.restart(fullRestart: true);
|
||||||
|
|
||||||
|
expect(result.code, 1);
|
||||||
|
expect(result.message, contains('Page requires full reload'));
|
||||||
|
}));
|
||||||
|
|
||||||
test('printHelp without details is spoopy', () => testbed.run(() async {
|
test('printHelp without details is spoopy', () => testbed.run(() async {
|
||||||
residentWebRunner.printHelp(details: false);
|
residentWebRunner.printHelp(details: false);
|
||||||
final BufferLogger bufferLogger = logger;
|
final BufferLogger bufferLogger = logger;
|
||||||
|
Loading…
Reference in New Issue
Block a user