Unverified Commit f877c97b authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Use persisted build information to automatically clean old outputs in assemble (#39654)

parent 03e81003
...@@ -29,7 +29,6 @@ class UnpackLinux extends Target { ...@@ -29,7 +29,6 @@ class UnpackLinux extends Target {
Source.pattern('{PROJECT_DIR}/linux/flutter/flutter_plugin_registrar.h'), Source.pattern('{PROJECT_DIR}/linux/flutter/flutter_plugin_registrar.h'),
Source.pattern('{PROJECT_DIR}/linux/flutter/flutter_glfw.h'), Source.pattern('{PROJECT_DIR}/linux/flutter/flutter_glfw.h'),
Source.pattern('{PROJECT_DIR}/linux/flutter/icudtl.dat'), Source.pattern('{PROJECT_DIR}/linux/flutter/icudtl.dat'),
Source.pattern('{PROJECT_DIR}/linux/flutter/cpp_client_wrapper_glfw/*'),
]; ];
@override @override
......
...@@ -122,9 +122,6 @@ abstract class UnpackMacOS extends Target { ...@@ -122,9 +122,6 @@ abstract class UnpackMacOS extends Target {
final Directory targetDirectory = environment final Directory targetDirectory = environment
.outputDir .outputDir
.childDirectory('FlutterMacOS.framework'); .childDirectory('FlutterMacOS.framework');
if (targetDirectory.existsSync()) {
targetDirectory.deleteSync(recursive: true);
}
final ProcessResult result = await processManager final ProcessResult result = await processManager
.run(<String>['cp', '-R', basePath, targetDirectory.path]); .run(<String>['cp', '-R', basePath, targetDirectory.path]);
...@@ -325,11 +322,6 @@ abstract class MacOSBundleFlutterAssets extends Target { ...@@ -325,11 +322,6 @@ abstract class MacOSBundleFlutterAssets extends Target {
final Directory assetDirectory = outputDirectory final Directory assetDirectory = outputDirectory
.childDirectory('Resources') .childDirectory('Resources')
.childDirectory('flutter_assets'); .childDirectory('flutter_assets');
// We're not smart enough to only remove assets that are removed. If
// anything changes blow away the whole directory.
if (assetDirectory.existsSync()) {
assetDirectory.deleteSync(recursive: true);
}
assetDirectory.createSync(recursive: true); assetDirectory.createSync(recursive: true);
final AssetBundle assetBundle = AssetBundleFactory.instance.createBundle(); final AssetBundle assetBundle = AssetBundleFactory.instance.createBundle();
final int result = await assetBundle.build( final int result = await assetBundle.build(
......
...@@ -32,7 +32,6 @@ class UnpackWindows extends Target { ...@@ -32,7 +32,6 @@ class UnpackWindows extends Target {
Source.pattern('{PROJECT_DIR}/windows/flutter/flutter_plugin_registrar.h'), Source.pattern('{PROJECT_DIR}/windows/flutter/flutter_plugin_registrar.h'),
Source.pattern('{PROJECT_DIR}/windows/flutter/flutter_windows.h'), Source.pattern('{PROJECT_DIR}/windows/flutter/flutter_windows.h'),
Source.pattern('{PROJECT_DIR}/windows/flutter/icudtl.dat'), Source.pattern('{PROJECT_DIR}/windows/flutter/icudtl.dat'),
Source.pattern('{PROJECT_DIR}/windows/flutter/cpp_client_wrapper/*'),
]; ];
@override @override
......
...@@ -126,7 +126,7 @@ void main() { ...@@ -126,7 +126,7 @@ void main() {
final BuildResult result = await buildSystem.build(badTarget, environment); final BuildResult result = await buildSystem.build(badTarget, environment);
expect(result.hasException, true); expect(result.hasException, true);
expect(result.exceptions.values.single.exception, isInstanceOf<MissingOutputException>()); expect(result.exceptions.values.single.exception, isInstanceOf<FileSystemException>());
})); }));
test('Saves a stamp file with inputs and outputs', () => testbed.run(() async { test('Saves a stamp file with inputs and outputs', () => testbed.run(() async {
...@@ -211,6 +211,52 @@ void main() { ...@@ -211,6 +211,52 @@ void main() {
expect(shared, 1); expect(shared, 1);
})); }));
test('Automatically cleans old outputs when dag changes', () => testbed.run(() async {
final TestTarget testTarget = TestTarget((Environment envionment) async {
environment.buildDir.childFile('foo.out').createSync();
})
..inputs = const <Source>[Source.pattern('{PROJECT_DIR}/foo.dart')]
..outputs = const <Source>[Source.pattern('{BUILD_DIR}/foo.out')];
fs.file('foo.dart').createSync();
await buildSystem.build(testTarget, environment);
expect(environment.buildDir.childFile('foo.out').existsSync(), true);
final TestTarget testTarget2 = TestTarget((Environment envionment) async {
environment.buildDir.childFile('bar.out').createSync();
})
..inputs = const <Source>[Source.pattern('{PROJECT_DIR}/foo.dart')]
..outputs = const <Source>[Source.pattern('{BUILD_DIR}/bar.out')];
await buildSystem.build(testTarget2, environment);
expect(environment.buildDir.childFile('bar.out').existsSync(), true);
expect(environment.buildDir.childFile('foo.out').existsSync(), false);
}));
test('reruns build if stamp is corrupted', () => testbed.run(() async {
final TestTarget testTarget = TestTarget((Environment envionment) async {
environment.buildDir.childFile('foo.out').createSync();
})
..inputs = const <Source>[Source.pattern('{PROJECT_DIR}/foo.dart')]
..outputs = const <Source>[Source.pattern('{BUILD_DIR}/foo.out')];
fs.file('foo.dart').createSync();
await buildSystem.build(testTarget, environment);
// invalid JSON
environment.buildDir.childFile('test.stamp').writeAsStringSync('{X');
await buildSystem.build(testTarget, environment);
// empty file
environment.buildDir.childFile('test.stamp').writeAsStringSync('');
await buildSystem.build(testTarget, environment);
// invalid format
environment.buildDir.childFile('test.stamp').writeAsStringSync('{"inputs": 2, "outputs": 3}');
await buildSystem.build(testTarget, environment);
}));
test('handles a throwing build action', () => testbed.run(() async { test('handles a throwing build action', () => testbed.run(() async {
final BuildResult result = await buildSystem.build(fizzTarget, environment); final BuildResult result = await buildSystem.build(fizzTarget, environment);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment