Dont crash if the tool cannot delete asset directory during debugging (#45407)

This commit is contained in:
Jonah Williams 2019-11-22 14:06:05 -08:00 committed by GitHub
parent 35b571ccfc
commit b54bb6abbb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 1 deletions

View file

@ -10,6 +10,7 @@ import 'package:pool/pool.dart';
import 'asset.dart'; import 'asset.dart';
import 'base/common.dart'; import 'base/common.dart';
import 'base/file_system.dart'; import 'base/file_system.dart';
import 'base/logger.dart';
import 'build_info.dart'; import 'build_info.dart';
import 'build_system/build_system.dart'; import 'build_system/build_system.dart';
import 'build_system/depfile.dart'; import 'build_system/depfile.dart';
@ -173,9 +174,18 @@ Future<AssetBundle> buildAssets({
Future<void> writeBundle( Future<void> writeBundle(
Directory bundleDir, Directory bundleDir,
Map<String, DevFSContent> assetEntries, Map<String, DevFSContent> assetEntries,
{ Logger loggerOverride }
) async { ) async {
loggerOverride ??= logger;
if (bundleDir.existsSync()) { if (bundleDir.existsSync()) {
bundleDir.deleteSync(recursive: true); try {
bundleDir.deleteSync(recursive: true);
} on FileSystemException catch (err) {
loggerOverride.printError(
'Failed to clean up asset directory ${bundleDir.path}: $err\n'
'To clean build artifacts, use the command "flutter clean".'
);
}
} }
bundleDir.createSync(recursive: true); bundleDir.createSync(recursive: true);

View file

@ -9,8 +9,12 @@ import 'package:file/memory.dart';
import 'package:flutter_tools/src/asset.dart'; import 'package:flutter_tools/src/asset.dart';
import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/bundle.dart';
import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/devfs.dart';
import 'package:mockito/mockito.dart';
import '../src/common.dart'; import '../src/common.dart';
import '../src/context.dart'; import '../src/context.dart';
@ -179,4 +183,18 @@ flutter:
}); });
}); });
test('Failed directory delete shows message', () async {
final MockDirectory mockDirectory = MockDirectory();
final BufferLogger bufferLogger = BufferLogger();
when(mockDirectory.existsSync()).thenReturn(true);
when(mockDirectory.deleteSync(recursive: true)).thenThrow(const FileSystemException('ABCD'));
await writeBundle(mockDirectory, <String, DevFSContent>{}, loggerOverride: bufferLogger);
verify(mockDirectory.createSync(recursive: true)).called(1);
expect(bufferLogger.errorText, contains('ABCD'));
});
} }
class MockDirectory extends Mock implements Directory {}