[vm/isolate] Prefer .dart_tool/package_config.json over .packages

Flutter has migrated away from using the discontinued
`package:package_resolver`, see [0], which should allow us to prefer the new
`.dart_tool/package_config.json` format now.

[0] https://github.com/flutter/flutter/issues/56289

Closes https://github.com/dart-lang/sdk/issues/41748

Change-Id: I9026af05756d01f4a3e0e0fc97fa77d27bf805b4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/146840
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
This commit is contained in:
Martin Kustermann 2020-05-11 17:32:07 +00:00 committed by commit-bot@chromium.org
parent 4ead8ad652
commit 57e54cdd31
4 changed files with 52 additions and 60 deletions

View file

@ -338,33 +338,13 @@ _findPackagesConfiguration(bool traceLoading, Uri base) {
while (true) {
final dirUri = currentDir.uri;
// We prefer using `.packages` over `.dart_tool/package_config.json` so
// old users of `Isolate.packageConfig` which cannot handle the new format
// will continue to work (see https://github.com/dart-lang/sdk/issues/41748).
final packagesFile = dirUri.resolve(".packages");
if (traceLoading) {
_log("Checking for $packagesFile file.");
}
File file = File.fromUri(packagesFile);
bool exists = file.existsSync();
if (traceLoading) {
_log("$packagesFile exists: $exists");
}
if (exists) {
final String data = utf8.decode(file.readAsBytesSync());
if (traceLoading) {
_log("Loaded packages file from $packagesFile:\n$data");
}
return _parsePackagesFile(traceLoading, packagesFile, data);
}
// We fallback to using `.dart_tool/package_config.json` if it exists.
// We prefer using `.dart_tool/package_config.json` over `.packages`.
final packageConfig = dirUri.resolve(".dart_tool/package_config.json");
if (traceLoading) {
_log("Checking for $packageConfig file.");
}
file = File.fromUri(packageConfig);
exists = file.existsSync();
File file = File.fromUri(packageConfig);
bool exists = file.existsSync();
if (traceLoading) {
_log("$packageConfig exists: $exists");
}
@ -376,6 +356,24 @@ _findPackagesConfiguration(bool traceLoading, Uri base) {
return _parsePackageConfig(traceLoading, packageConfig, data);
}
// We fallback to using `.packages` if it exists.
final packagesFile = dirUri.resolve(".packages");
if (traceLoading) {
_log("Checking for $packagesFile file.");
}
file = File.fromUri(packagesFile);
exists = file.existsSync();
if (traceLoading) {
_log("$packagesFile exists: $exists");
}
if (exists) {
final String data = utf8.decode(file.readAsBytesSync());
if (traceLoading) {
_log("Loaded packages file from $packagesFile:\n$data");
}
return _parsePackagesFile(traceLoading, packagesFile, data);
}
final parentDir = currentDir.parent;
if (dirUri == parentDir.uri) break;
currentDir = parentDir;

View file

@ -337,33 +337,13 @@ _findPackagesConfiguration(bool traceLoading, Uri base) {
while (true) {
final dirUri = currentDir.uri;
// We prefer using `.packages` over `.dart_tool/package_config.json` so
// old users of `Isolate.packageConfig` which cannot handle the new format
// will continue to work (see https://github.com/dart-lang/sdk/issues/41748).
final packagesFile = dirUri.resolve(".packages");
if (traceLoading) {
_log("Checking for $packagesFile file.");
}
File file = File.fromUri(packagesFile);
bool exists = file.existsSync();
if (traceLoading) {
_log("$packagesFile exists: $exists");
}
if (exists) {
final String data = utf8.decode(file.readAsBytesSync());
if (traceLoading) {
_log("Loaded packages file from $packagesFile:\n$data");
}
return _parsePackagesFile(traceLoading, packagesFile, data);
}
// We fallback to using `.dart_tool/package_config.json` if it exists.
// We prefer using `.dart_tool/package_config.json` over `.packages`.
final packageConfig = dirUri.resolve(".dart_tool/package_config.json");
if (traceLoading) {
_log("Checking for $packageConfig file.");
}
file = File.fromUri(packageConfig);
exists = file.existsSync();
File file = File.fromUri(packageConfig);
bool exists = file.existsSync();
if (traceLoading) {
_log("$packageConfig exists: $exists");
}
@ -375,6 +355,24 @@ _findPackagesConfiguration(bool traceLoading, Uri base) {
return _parsePackageConfig(traceLoading, packageConfig, data);
}
// We fallback to using `.packages` if it exists.
final packagesFile = dirUri.resolve(".packages");
if (traceLoading) {
_log("Checking for $packagesFile file.");
}
file = File.fromUri(packagesFile);
exists = file.existsSync();
if (traceLoading) {
_log("$packagesFile exists: $exists");
}
if (exists) {
final String data = utf8.decode(file.readAsBytesSync());
if (traceLoading) {
_log("Loaded packages file from $packagesFile:\n$data");
}
return _parsePackagesFile(traceLoading, packagesFile, data);
}
final parentDir = currentDir.parent;
if (dirUri == parentDir.uri) break;
currentDir = parentDir;

View file

@ -14,20 +14,18 @@ main() async {
// Make a folder structure that has both ".dart_tool/package_config.json" and
// ".packages" and ensure VM prefers to use ".packages".
await withTempDir((String tempDir) async {
// Setup ".packages" with "foo -> ..." mapping.
// Setup bogus ".packages" with "foo -> ..." with invalid mapping.
final dotPackagesPath = path.join(tempDir, '.packages');
final dotPackagesFile = File(dotPackagesPath);
await dotPackagesFile.writeAsString(buildDotPackages('foo'));
await dotPackagesFile.writeAsString(buildDotPackages('invalid'));
// Setup bogus ".dart_tool/package_config.json" with "invalid -> ..."
// mapping.
// Setup ".dart_tool/package_config.json".
final dotDartToolDir = path.join(tempDir, '.dart_tool');
await Directory(dotDartToolDir).create();
final packageConfigJsonPath =
path.join(dotDartToolDir, 'package_config.json');
final packageConfigJsonFile = File(packageConfigJsonPath);
await packageConfigJsonFile
.writeAsString(buildPackageConfig('invalid', true));
await packageConfigJsonFile.writeAsString(buildPackageConfig('foo', true));
final mainFile = path.join(tempDir, 'main.dart');
await File(mainFile).writeAsString('''
@ -36,7 +34,7 @@ import 'dart:isolate';
main() async {
final uri = await Isolate.packageConfig;
final expectedUri = Uri.parse('${dotPackagesFile.uri}');
final expectedUri = Uri.parse('${packageConfigJsonFile.uri}');
if (uri != expectedUri) {
throw 'VM should use .packages file (but used \$uri).';
}

View file

@ -14,20 +14,18 @@ main() async {
// Make a folder structure that has both ".dart_tool/package_config.json" and
// ".packages" and ensure VM prefers to use ".packages".
await withTempDir((String tempDir) async {
// Setup ".packages" with "foo -> ..." mapping.
// Setup bogus ".packages" with "foo -> ..." with invalid mapping.
final dotPackagesPath = path.join(tempDir, '.packages');
final dotPackagesFile = File(dotPackagesPath);
await dotPackagesFile.writeAsString(buildDotPackages('foo'));
await dotPackagesFile.writeAsString(buildDotPackages('invalid'));
// Setup bogus ".dart_tool/package_config.json" with "invalid -> ..."
// mapping.
// Setup ".dart_tool/package_config.json".
final dotDartToolDir = path.join(tempDir, '.dart_tool');
await Directory(dotDartToolDir).create();
final packageConfigJsonPath =
path.join(dotDartToolDir, 'package_config.json');
final packageConfigJsonFile = File(packageConfigJsonPath);
await packageConfigJsonFile
.writeAsString(buildPackageConfig('invalid', true));
await packageConfigJsonFile.writeAsString(buildPackageConfig('foo', true));
final mainFile = path.join(tempDir, 'main.dart');
await File(mainFile).writeAsString('''
@ -36,7 +34,7 @@ import 'dart:isolate';
main() async {
final uri = await Isolate.packageConfig;
final expectedUri = Uri.parse('${dotPackagesFile.uri}');
final expectedUri = Uri.parse('${packageConfigJsonFile.uri}');
if (uri != expectedUri) {
throw 'VM should use .packages file (but used \$uri).';
}