From 4c221231c9dcc15f46a4e927caeadde60fa02836 Mon Sep 17 00:00:00 2001 From: Alexander Aprelev Date: Wed, 11 Apr 2018 14:48:14 -0700 Subject: [PATCH] Sync .packages file as a normal input file. (#16467) * Sync .packages file as regular file. Currently .packages file is treated specially as DevFSStringContent to accommodate package-file rewrite when it is sent to the device for dart1 compilation. In dart2 we need to treat .packages as regular file because from frontend perspective it's just a normal input file. --- packages/flutter_tools/lib/src/devfs.dart | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/flutter_tools/lib/src/devfs.dart b/packages/flutter_tools/lib/src/devfs.dart index 79adfdc55a..c07eea0544 100644 --- a/packages/flutter_tools/lib/src/devfs.dart +++ b/packages/flutter_tools/lib/src/devfs.dart @@ -422,9 +422,10 @@ class DevFS { await _scanDirectory(rootDirectory, recursive: true, fileFilter: fileFilter); + final bool previewDart2 = generator != null; if (fs.isFileSync(_packagesFilePath)) { printTrace('Scanning package files'); - await _scanPackages(fileFilter); + await _scanPackages(fileFilter, previewDart2); } if (bundle != null) { printTrace('Scanning asset files'); @@ -475,7 +476,7 @@ class DevFS { assetPathsToEvict.add(archivePath); } }); - if (generator != null) { + if (previewDart2) { // We run generator even if [dirtyEntries] was empty because we want // to keep logic of accepting/rejecting generator's output simple: // we must accept/reject generator's output after every [update] call. @@ -580,9 +581,11 @@ class DevFS { return true; } assert((file is Link) || (file is File)); - if (ignoreDotFiles && fs.path.basename(file.path).startsWith('.')) { - // Skip dot files. - return true; + final String basename = fs.path.basename(file.path); + if (ignoreDotFiles && basename.startsWith('.')) { + // Skip dot files, but not the '.packages' file (even though in dart1 + // mode devfs['.packages'] will be overwritten with synthesized string content). + return basename != '.packages'; } return false; } @@ -688,7 +691,7 @@ class DevFS { ); } - Future _scanPackages(Set fileFilter) async { + Future _scanPackages(Set fileFilter, bool previewDart2) async { StringBuffer sb; final PackageMap packageMap = new PackageMap(_packagesFilePath); @@ -721,6 +724,14 @@ class DevFS { sb.writeln('$packageName:$directoryUriOnDevice'); } } + if (previewDart2) { + // When in previewDart2 mode we don't update .packages-file entry + // so actual file will get invalidated in frontend. + // We don't need to synthesize device-correct .packages file because + // it is not going to be used on the device anyway - compilation + // is done on the host. + return; + } if (sb != null) { final DevFSContent content = _entries[fs.path.toUri('.packages')]; if (content is DevFSStringContent && content.string == sb.toString()) {