From 61291aeeaf7378e997f0ad263c091fec6b493e4e Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Mon, 10 Dec 2018 15:57:52 -0800 Subject: [PATCH] ensure lastBuildTimestamp is set before early return (#25058) --- packages/flutter_tools/lib/src/asset.dart | 6 ++++-- packages/flutter_tools/test/asset_test.dart | 18 ++++++++++++++++++ .../test/data/fuchsia_test/main/.gitignore | 1 + .../test/data/fuchsia_test/main/.packages | 1 + 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 packages/flutter_tools/test/data/fuchsia_test/main/.gitignore create mode 100644 packages/flutter_tools/test/data/fuchsia_test/main/.packages diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart index 871c882ee9..c5716affff 100644 --- a/packages/flutter_tools/lib/src/asset.dart +++ b/packages/flutter_tools/lib/src/asset.dart @@ -107,6 +107,10 @@ class _ManifestAssetBundle implements AssetBundle { if (flutterManifest == null) return 1; + // If the last build time isn't set before this early return, empty pubspecs will + // hang on hot reload, as the incremental dill files will never be copied to the + // device. + _lastBuildTimestamp = DateTime.now(); if (flutterManifest.isEmpty) { entries[_assetManifestJson] = DevFSStringContent('{}'); return 0; @@ -114,8 +118,6 @@ class _ManifestAssetBundle implements AssetBundle { final String assetBasePath = fs.path.dirname(fs.path.absolute(manifestPath)); - _lastBuildTimestamp = DateTime.now(); - final PackageMap packageMap = PackageMap(packagesPath); // The _assetVariants map contains an entry for each asset listed diff --git a/packages/flutter_tools/test/asset_test.dart b/packages/flutter_tools/test/asset_test.dart index c681ca562d..bb8f2598e3 100644 --- a/packages/flutter_tools/test/asset_test.dart +++ b/packages/flutter_tools/test/asset_test.dart @@ -41,8 +41,26 @@ void main() { await getValueAsString('FontManifest.json', asset), '[{"family":"packages/font/test_font","fonts":[{"asset":"packages/font/test_font_file"}]}]', ); + expect(asset.wasBuiltOnce(), true); }); + testUsingContext('handles empty pubspec with .packages', () async { + final String dataPath = fs.path.join( + getFlutterRoot(), + 'packages', + 'flutter_tools', + 'test', + 'data', + 'fuchsia_test', + ); + final AssetBundle asset = AssetBundleFactory.instance.createBundle(); + await asset.build( + manifestPath : fs.path.join(dataPath, 'main', 'pubspec.yaml'), // file doesn't exist + packagesPath: fs.path.join(dataPath, 'main', '.packages'), + includeDefaultFonts: false, + ); + expect(asset.wasBuiltOnce(), true); + }); }); } diff --git a/packages/flutter_tools/test/data/fuchsia_test/main/.gitignore b/packages/flutter_tools/test/data/fuchsia_test/main/.gitignore new file mode 100644 index 0000000000..6265676b30 --- /dev/null +++ b/packages/flutter_tools/test/data/fuchsia_test/main/.gitignore @@ -0,0 +1 @@ +!.packages \ No newline at end of file diff --git a/packages/flutter_tools/test/data/fuchsia_test/main/.packages b/packages/flutter_tools/test/data/fuchsia_test/main/.packages new file mode 100644 index 0000000000..9882eb023e --- /dev/null +++ b/packages/flutter_tools/test/data/fuchsia_test/main/.packages @@ -0,0 +1 @@ +testo:lib/ \ No newline at end of file