Clean up pre-existing DevFS during creation (#10843)
diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart
index 2657e92..39b9766 100644
--- a/packages/flutter_tools/lib/src/devfs.dart
+++ b/packages/flutter_tools/lib/src/devfs.dart
@@ -5,6 +5,8 @@
import 'dart:async';
import 'dart:convert' show BASE64, UTF8;
+import 'package:json_rpc_2/json_rpc_2.dart' as rpc;
+
import 'asset.dart';
import 'base/context.dart';
import 'base/file_system.dart';
@@ -185,10 +187,7 @@
@override
Future<dynamic> destroy(String fsName) async {
- await vmService.vm.invokeRpcRaw(
- '_deleteDevFS',
- params: <String, dynamic> { 'fsName': fsName },
- );
+ await vmService.vm.deleteDevFS(fsName);
}
@override
@@ -352,7 +351,16 @@
Future<Uri> create() async {
printTrace('DevFS: Creating new filesystem on the device ($_baseUri)');
- _baseUri = await _operations.create(fsName);
+ try {
+ _baseUri = await _operations.create(fsName);
+ } on rpc.RpcException catch (rpcException) {
+ // 1001 is kFileSystemAlreadyExists in //dart/runtime/vm/json_stream.h
+ if (rpcException.code != 1001)
+ rethrow;
+ printTrace('DevFS: Creating failed. Destroying and trying again');
+ await destroy();
+ _baseUri = await _operations.create(fsName);
+ }
printTrace('DevFS: Created new filesystem on the device ($_baseUri)');
return _baseUri;
}