Unverified Commit 4037e506 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[flutter_tools] update asset manifest to use package_config instead of package_map (#53944)

parent 602475e5
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
import 'dart:async'; import 'dart:async';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
import 'package:package_config/package_config.dart';
import 'package:yaml/yaml.dart'; import 'package:yaml/yaml.dart';
import 'base/context.dart'; import 'base/context.dart';
...@@ -147,8 +148,16 @@ class _ManifestAssetBundle implements AssetBundle { ...@@ -147,8 +148,16 @@ class _ManifestAssetBundle implements AssetBundle {
} }
final String assetBasePath = globals.fs.path.dirname(globals.fs.path.absolute(manifestPath)); final String assetBasePath = globals.fs.path.dirname(globals.fs.path.absolute(manifestPath));
final PackageConfig packageConfig = await loadPackageConfigUri(
final PackageMap packageMap = PackageMap(packagesPath, fileSystem: globals.fs); globals.fs.file(packagesPath).absolute.uri,
loader: (Uri uri) {
final File file = globals.fs.file(uri);
if (!file.existsSync()) {
return null;
}
return file.readAsBytes();
},
);
final List<Uri> wildcardDirectories = <Uri>[]; final List<Uri> wildcardDirectories = <Uri>[];
// The _assetVariants map contains an entry for each asset listed // The _assetVariants map contains an entry for each asset listed
...@@ -156,7 +165,7 @@ class _ManifestAssetBundle implements AssetBundle { ...@@ -156,7 +165,7 @@ class _ManifestAssetBundle implements AssetBundle {
// value of each image asset is a list of resolution-specific "variants", // value of each image asset is a list of resolution-specific "variants",
// see _AssetDirectoryCache. // see _AssetDirectoryCache.
final Map<_Asset, List<_Asset>> assetVariants = _parseAssets( final Map<_Asset, List<_Asset>> assetVariants = _parseAssets(
packageMap, packageConfig,
flutterManifest, flutterManifest,
wildcardDirectories, wildcardDirectories,
assetBasePath, assetBasePath,
...@@ -170,14 +179,14 @@ class _ManifestAssetBundle implements AssetBundle { ...@@ -170,14 +179,14 @@ class _ManifestAssetBundle implements AssetBundle {
final List<Map<String, dynamic>> fonts = _parseFonts( final List<Map<String, dynamic>> fonts = _parseFonts(
flutterManifest, flutterManifest,
includeDefaultFonts, includeDefaultFonts,
packageMap, packageConfig,
); );
// Add fonts and assets from packages. // Add fonts and assets from packages.
for (final String packageName in packageMap.map.keys) { for (final Package package in packageConfig.packages) {
final Uri package = packageMap.map[packageName]; final Uri packageUri = package.packageUriRoot;
if (package != null && package.scheme == 'file') { if (packageUri != null && packageUri.scheme == 'file') {
final String packageManifestPath = globals.fs.path.fromUri(package.resolve('../pubspec.yaml')); final String packageManifestPath = globals.fs.path.fromUri(packageUri.resolve('../pubspec.yaml'));
final FlutterManifest packageFlutterManifest = FlutterManifest.createFromPath(packageManifestPath); final FlutterManifest packageFlutterManifest = FlutterManifest.createFromPath(packageManifestPath);
if (packageFlutterManifest == null) { if (packageFlutterManifest == null) {
continue; continue;
...@@ -189,11 +198,11 @@ class _ManifestAssetBundle implements AssetBundle { ...@@ -189,11 +198,11 @@ class _ManifestAssetBundle implements AssetBundle {
final String packageBasePath = globals.fs.path.dirname(packageManifestPath); final String packageBasePath = globals.fs.path.dirname(packageManifestPath);
final Map<_Asset, List<_Asset>> packageAssets = _parseAssets( final Map<_Asset, List<_Asset>> packageAssets = _parseAssets(
packageMap, packageConfig,
packageFlutterManifest, packageFlutterManifest,
wildcardDirectories, wildcardDirectories,
packageBasePath, packageBasePath,
packageName: packageName, packageName: package.name,
); );
if (packageAssets == null) { if (packageAssets == null) {
...@@ -204,8 +213,8 @@ class _ManifestAssetBundle implements AssetBundle { ...@@ -204,8 +213,8 @@ class _ManifestAssetBundle implements AssetBundle {
fonts.addAll(_parseFonts( fonts.addAll(_parseFonts(
packageFlutterManifest, packageFlutterManifest,
includeDefaultFonts, includeDefaultFonts,
packageMap, packageConfig,
packageName: packageName, packageName: package.name,
)); ));
} }
} }
...@@ -253,7 +262,7 @@ class _ManifestAssetBundle implements AssetBundle { ...@@ -253,7 +262,7 @@ class _ManifestAssetBundle implements AssetBundle {
entries[kFontManifestJson] = DevFSStringContent(json.encode(fonts)); entries[kFontManifestJson] = DevFSStringContent(json.encode(fonts));
// TODO(ianh): Only do the following line if we've changed packages or if our LICENSE file changed // TODO(ianh): Only do the following line if we've changed packages or if our LICENSE file changed
final LicenseResult licenseResult = licenseCollector.obtainLicenses(packageMap); final LicenseResult licenseResult = licenseCollector.obtainLicenses(packageConfig);
entries[_license] = DevFSStringContent(licenseResult.combinedLicenses); entries[_license] = DevFSStringContent(licenseResult.combinedLicenses);
additionalDependencies = licenseResult.dependencies; additionalDependencies = licenseResult.dependencies;
...@@ -383,18 +392,18 @@ class LicenseCollector { ...@@ -383,18 +392,18 @@ class LicenseCollector {
/// Obtain licenses from the `packageMap` into a single result. /// Obtain licenses from the `packageMap` into a single result.
LicenseResult obtainLicenses( LicenseResult obtainLicenses(
PackageMap packageMap, PackageConfig packageConfig,
) { ) {
final Map<String, Set<String>> packageLicenses = <String, Set<String>>{}; final Map<String, Set<String>> packageLicenses = <String, Set<String>>{};
final Set<String> allPackages = <String>{}; final Set<String> allPackages = <String>{};
final List<File> dependencies = <File>[]; final List<File> dependencies = <File>[];
for (final String packageName in packageMap.map.keys) { for (final Package package in packageConfig.packages) {
final Uri package = packageMap.map[packageName]; final Uri packageUri = package.packageUriRoot;
if (package == null || package.scheme != 'file') { if (packageUri == null || packageUri.scheme != 'file') {
continue; continue;
} }
final File file = _fileSystem.file(package.resolve('../LICENSE')); final File file = _fileSystem.file(packageUri.resolve('../LICENSE'));
if (!file.existsSync()) { if (!file.existsSync()) {
continue; continue;
} }
...@@ -414,7 +423,7 @@ class LicenseCollector { ...@@ -414,7 +423,7 @@ class LicenseCollector {
} }
} }
if (licenseText == null) { if (licenseText == null) {
packageNames = <String>[packageName]; packageNames = <String>[package.name];
licenseText = rawLicense; licenseText = rawLicense;
} }
packageLicenses.putIfAbsent(licenseText, () => <String>{}) packageLicenses.putIfAbsent(licenseText, () => <String>{})
...@@ -476,7 +485,7 @@ DevFSContent _createAssetManifest(Map<_Asset, List<_Asset>> assetVariants) { ...@@ -476,7 +485,7 @@ DevFSContent _createAssetManifest(Map<_Asset, List<_Asset>> assetVariants) {
List<Map<String, dynamic>> _parseFonts( List<Map<String, dynamic>> _parseFonts(
FlutterManifest manifest, FlutterManifest manifest,
bool includeDefaultFonts, bool includeDefaultFonts,
PackageMap packageMap, { PackageConfig packageConfig, {
String packageName, String packageName,
}) { }) {
return <Map<String, dynamic>>[ return <Map<String, dynamic>>[
...@@ -488,7 +497,7 @@ List<Map<String, dynamic>> _parseFonts( ...@@ -488,7 +497,7 @@ List<Map<String, dynamic>> _parseFonts(
..._createFontsDescriptor(_parsePackageFonts( ..._createFontsDescriptor(_parsePackageFonts(
manifest, manifest,
packageName, packageName,
packageMap, packageConfig,
)), )),
]; ];
} }
...@@ -498,7 +507,7 @@ List<Map<String, dynamic>> _parseFonts( ...@@ -498,7 +507,7 @@ List<Map<String, dynamic>> _parseFonts(
List<Font> _parsePackageFonts( List<Font> _parsePackageFonts(
FlutterManifest manifest, FlutterManifest manifest,
String packageName, String packageName,
PackageMap packageMap, PackageConfig packageConfig,
) { ) {
final List<Font> packageFonts = <Font>[]; final List<Font> packageFonts = <Font>[];
for (final Font font in manifest.fonts) { for (final Font font in manifest.fonts) {
...@@ -506,7 +515,8 @@ List<Font> _parsePackageFonts( ...@@ -506,7 +515,8 @@ List<Font> _parsePackageFonts(
for (final FontAsset fontAsset in font.fontAssets) { for (final FontAsset fontAsset in font.fontAssets) {
final Uri assetUri = fontAsset.assetUri; final Uri assetUri = fontAsset.assetUri;
if (assetUri.pathSegments.first == 'packages' && if (assetUri.pathSegments.first == 'packages' &&
!globals.fs.isFileSync(globals.fs.path.fromUri(packageMap.map[packageName].resolve('../${assetUri.path}')))) { !globals.fs.isFileSync(globals.fs.path.fromUri(
packageConfig[packageName].packageUriRoot.resolve('../${assetUri.path}')))) {
packageFontAssets.add(FontAsset( packageFontAssets.add(FontAsset(
fontAsset.assetUri, fontAsset.assetUri,
weight: fontAsset.weight, weight: fontAsset.weight,
...@@ -605,7 +615,7 @@ class _AssetDirectoryCache { ...@@ -605,7 +615,7 @@ class _AssetDirectoryCache {
/// ///
Map<_Asset, List<_Asset>> _parseAssets( Map<_Asset, List<_Asset>> _parseAssets(
PackageMap packageMap, PackageConfig packageConfig,
FlutterManifest flutterManifest, FlutterManifest flutterManifest,
List<Uri> wildcardDirectories, List<Uri> wildcardDirectories,
String assetBase, { String assetBase, {
...@@ -618,11 +628,11 @@ Map<_Asset, List<_Asset>> _parseAssets( ...@@ -618,11 +628,11 @@ Map<_Asset, List<_Asset>> _parseAssets(
for (final Uri assetUri in flutterManifest.assets) { for (final Uri assetUri in flutterManifest.assets) {
if (assetUri.toString().endsWith('/')) { if (assetUri.toString().endsWith('/')) {
wildcardDirectories.add(assetUri); wildcardDirectories.add(assetUri);
_parseAssetsFromFolder(packageMap, flutterManifest, assetBase, _parseAssetsFromFolder(packageConfig, flutterManifest, assetBase,
cache, result, assetUri, cache, result, assetUri,
excludeDirs: excludeDirs, packageName: packageName); excludeDirs: excludeDirs, packageName: packageName);
} else { } else {
_parseAssetFromFile(packageMap, flutterManifest, assetBase, _parseAssetFromFile(packageConfig, flutterManifest, assetBase,
cache, result, assetUri, cache, result, assetUri,
excludeDirs: excludeDirs, packageName: packageName); excludeDirs: excludeDirs, packageName: packageName);
} }
...@@ -632,7 +642,7 @@ Map<_Asset, List<_Asset>> _parseAssets( ...@@ -632,7 +642,7 @@ Map<_Asset, List<_Asset>> _parseAssets(
for (final Font font in flutterManifest.fonts) { for (final Font font in flutterManifest.fonts) {
for (final FontAsset fontAsset in font.fontAssets) { for (final FontAsset fontAsset in font.fontAssets) {
final _Asset baseAsset = _resolveAsset( final _Asset baseAsset = _resolveAsset(
packageMap, packageConfig,
assetBase, assetBase,
fontAsset.assetUri, fontAsset.assetUri,
packageName, packageName,
...@@ -650,7 +660,7 @@ Map<_Asset, List<_Asset>> _parseAssets( ...@@ -650,7 +660,7 @@ Map<_Asset, List<_Asset>> _parseAssets(
} }
void _parseAssetsFromFolder( void _parseAssetsFromFolder(
PackageMap packageMap, PackageConfig packageConfig,
FlutterManifest flutterManifest, FlutterManifest flutterManifest,
String assetBase, String assetBase,
_AssetDirectoryCache cache, _AssetDirectoryCache cache,
...@@ -675,14 +685,14 @@ void _parseAssetsFromFolder( ...@@ -675,14 +685,14 @@ void _parseAssetsFromFolder(
final Uri uri = Uri.file(relativePath, windows: globals.platform.isWindows); final Uri uri = Uri.file(relativePath, windows: globals.platform.isWindows);
_parseAssetFromFile(packageMap, flutterManifest, assetBase, cache, result, _parseAssetFromFile(packageConfig, flutterManifest, assetBase, cache, result,
uri, packageName: packageName); uri, packageName: packageName);
} }
} }
} }
void _parseAssetFromFile( void _parseAssetFromFile(
PackageMap packageMap, PackageConfig packageConfig,
FlutterManifest flutterManifest, FlutterManifest flutterManifest,
String assetBase, String assetBase,
_AssetDirectoryCache cache, _AssetDirectoryCache cache,
...@@ -692,7 +702,7 @@ void _parseAssetFromFile( ...@@ -692,7 +702,7 @@ void _parseAssetFromFile(
String packageName, String packageName,
}) { }) {
final _Asset asset = _resolveAsset( final _Asset asset = _resolveAsset(
packageMap, packageConfig,
assetBase, assetBase,
assetUri, assetUri,
packageName, packageName,
...@@ -718,7 +728,7 @@ void _parseAssetFromFile( ...@@ -718,7 +728,7 @@ void _parseAssetFromFile(
} }
_Asset _resolveAsset( _Asset _resolveAsset(
PackageMap packageMap, PackageConfig packageConfig,
String assetsBaseDir, String assetsBaseDir,
Uri assetUri, Uri assetUri,
String packageName, String packageName,
...@@ -727,7 +737,7 @@ _Asset _resolveAsset( ...@@ -727,7 +737,7 @@ _Asset _resolveAsset(
if (assetUri.pathSegments.first == 'packages' && !globals.fs.isFileSync(globals.fs.path.join(assetsBaseDir, assetPath))) { if (assetUri.pathSegments.first == 'packages' && !globals.fs.isFileSync(globals.fs.path.join(assetsBaseDir, assetPath))) {
// The asset is referenced in the pubspec.yaml as // The asset is referenced in the pubspec.yaml as
// 'packages/PACKAGE_NAME/PATH/TO/ASSET . // 'packages/PACKAGE_NAME/PATH/TO/ASSET .
final _Asset packageAsset = _resolvePackageAsset(assetUri, packageMap); final _Asset packageAsset = _resolvePackageAsset(assetUri, packageConfig);
if (packageAsset != null) { if (packageAsset != null) {
return packageAsset; return packageAsset;
} }
...@@ -742,11 +752,11 @@ _Asset _resolveAsset( ...@@ -742,11 +752,11 @@ _Asset _resolveAsset(
); );
} }
_Asset _resolvePackageAsset(Uri assetUri, PackageMap packageMap) { _Asset _resolvePackageAsset(Uri assetUri, PackageConfig packageConfig) {
assert(assetUri.pathSegments.first == 'packages'); assert(assetUri.pathSegments.first == 'packages');
if (assetUri.pathSegments.length > 1) { if (assetUri.pathSegments.length > 1) {
final String packageName = assetUri.pathSegments[1]; final String packageName = assetUri.pathSegments[1];
final Uri packageUri = packageMap.map[packageName]; final Uri packageUri = packageConfig[packageName]?.packageUriRoot;
if (packageUri != null && packageUri.scheme == 'file') { if (packageUri != null && packageUri.scheme == 'file') {
return _Asset( return _Asset(
baseDir: globals.fs.path.fromUri(packageUri), baseDir: globals.fs.path.fromUri(packageUri),
......
...@@ -5,7 +5,9 @@ ...@@ -5,7 +5,9 @@
import 'package:file/memory.dart'; 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/dart/package_map.dart'; import 'package:flutter_tools/src/convert.dart';
import 'package:package_config/package_config.dart';
import 'package:package_config/package_config_types.dart';
import '../src/common.dart'; import '../src/common.dart';
...@@ -246,7 +248,7 @@ void main() { ...@@ -246,7 +248,7 @@ void main() {
licenseCollector = LicenseCollector(fileSystem: fileSystem); licenseCollector = LicenseCollector(fileSystem: fileSystem);
}); });
testWithoutContext('processes dependant licenses according to instructions', () { testWithoutContext('processes dependent licenses according to instructions', () async {
fileSystem.file('foo/LICENSE') fileSystem.file('foo/LICENSE')
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync(_kMitLicense); ..writeAsStringSync(_kMitLicense);
...@@ -257,13 +259,34 @@ void main() { ...@@ -257,13 +259,34 @@ void main() {
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync(_kMitLicense); // intentionally a duplicate ..writeAsStringSync(_kMitLicense); // intentionally a duplicate
final PackageMap packageMap = PackageMap.test(<String, Uri>{ final File packageConfigFile = fileSystem.file('package_config.json')
'foo': Uri.parse('file:///foo/lib/'), ..writeAsStringSync(json.encode(
'bar': Uri.parse('file:///bar/lib/'), <String, Object>{
'fizz': Uri.parse('file:///fizz/lib/'), 'configVersion': 2,
}, fileSystem: fileSystem); 'packages': <Object>[
<String, Object>{
final LicenseResult result = licenseCollector.obtainLicenses(packageMap); 'name': 'foo',
'rootUri': 'file:///foo/',
'packageUri': 'lib/',
'languageVersion': '2.2'
},
<String, Object>{
'name': 'bar',
'rootUri': 'file:///bar/',
'packageUri': 'lib/',
'languageVersion': '2.2'
},
<String, Object>{
'name': 'fizz',
'rootUri': 'file:///fizz/',
'packageUri': 'lib/',
'languageVersion': '2.2'
},
],
}
));
final PackageConfig packageConfig = await loadPackageConfig(packageConfigFile.absolute);
final LicenseResult result = licenseCollector.obtainLicenses(packageConfig);
// All included licenses are combined in the result. // All included licenses are combined in the result.
expect(result.combinedLicenses, contains(_kApacheLicense)); expect(result.combinedLicenses, contains(_kApacheLicense));
......
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