Index: packages/package_config/lib/discovery.dart |
diff --git a/packages/package_config/lib/discovery.dart b/packages/package_config/lib/discovery.dart |
index 8e42af79d78fe213b9ec5d1f4ae9d034e99eb0d0..4c09eecfbabcde5ca56b1a1e086bbb7f4dbdc1dc 100644 |
--- a/packages/package_config/lib/discovery.dart |
+++ b/packages/package_config/lib/discovery.dart |
@@ -28,22 +28,21 @@ import "src/packages_io_impl.dart"; |
/// resolution file, for example one specified using a `--packages` |
/// command-line parameter. |
Future<Packages> loadPackagesFile(Uri packagesFile, |
- {Future<List<int>> loader(Uri uri)}) { |
+ {Future<List<int>> loader(Uri uri)}) async { |
Packages parseBytes(List<int> bytes) { |
Map<String, Uri> packageMap = pkgfile.parse(bytes, packagesFile); |
return new MapPackages(packageMap); |
} |
if (packagesFile.scheme == "file") { |
File file = new File.fromUri(packagesFile); |
- return file.readAsBytes().then(parseBytes); |
+ return parseBytes(await file.readAsBytes()); |
} |
if (loader == null) { |
- return _httpGet(packagesFile).then(parseBytes); |
+ return parseBytes(await _httpGet(packagesFile)); |
} |
- return loader(packagesFile).then(parseBytes); |
+ return parseBytes(await loader(packagesFile)); |
} |
- |
/// Create a [Packages] object for a package directory. |
/// |
/// The [packagesDir] URI should refer to a directory. |
@@ -63,7 +62,6 @@ Packages getPackagesDirectory(Uri packagesDir) { |
return new NonFilePackagesDirectoryPackages(packagesDir); |
} |
- |
/// Discover the package configuration for a Dart script. |
/// |
/// The [baseUri] points to either the Dart script or its directory. |
@@ -93,7 +91,7 @@ Packages getPackagesDirectory(Uri packagesDir) { |
/// The content should be a UTF-8 encoded `.packages` file, and must return an |
/// error future if loading fails for any reason. |
Future<Packages> findPackages(Uri baseUri, |
- {Future<List<int>> loader(Uri unsupportedUri)}) { |
+ {Future<List<int>> loader(Uri unsupportedUri)}) { |
if (baseUri.scheme == "file") { |
return new Future<Packages>.sync(() => findPackagesFromFile(baseUri)); |
} else if (loader != null) { |
@@ -191,17 +189,19 @@ Packages findPackagesFromFile(Uri fileBaseUri) { |
/// of the requested `.packages` file as bytes, which will be assumed to be |
/// UTF-8 encoded. |
Future<Packages> findPackagesFromNonFile(Uri nonFileUri, |
- {Future<List<int>> loader(Uri name)}) { |
+ {Future<List<int>> loader(Uri name)}) async { |
if (loader == null) loader = _httpGet; |
Uri packagesFileUri = nonFileUri.resolve(".packages"); |
- return loader(packagesFileUri).then((List<int> fileBytes) { |
+ |
+ try { |
+ List<int> fileBytes = await loader(packagesFileUri); |
Map<String, Uri> map = pkgfile.parse(fileBytes, packagesFileUri); |
return new MapPackages(map); |
- }, onError: (_) { |
+ } catch (_) { |
// Didn't manage to load ".packages". Assume a "packages/" directory. |
Uri packagesDirectoryUri = nonFileUri.resolve("packages/"); |
return new NonFilePackagesDirectoryPackages(packagesDirectoryUri); |
- }); |
+ } |
} |
/// Fetches a file over http. |