Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Unified Diff: sdk/lib/_internal/pub/lib/src/solver/version_solver.dart

Issue 1125373002: Convert a bunch of version solver code to use async/await. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/solver/version_queue.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
diff --git a/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart b/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
index 1c46c14896067e0d0fb04c448391af637d8526c1..0a10c9da6f156f338a91d88ade9f6e55b733f9f3 100644
--- a/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
+++ b/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
@@ -181,22 +181,21 @@ class PubspecCache {
}
/// Loads the pubspec for the package identified by [id].
- Future<Pubspec> getPubspec(PackageId id) {
+ Future<Pubspec> getPubspec(PackageId id) async {
_explicitlyCached.add(id);
// Complete immediately if it's already cached.
if (_pubspecs.containsKey(id)) {
_pubspecCacheHits++;
- return new Future<Pubspec>.value(_pubspecs[id]);
+ return _pubspecs[id];
}
_pubspecCacheMisses++;
var source = _sources[id.source];
- return source.describe(id).then((pubspec) {
- _pubspecs[id] = pubspec;
- return pubspec;
- });
+ var pubspec = await source.describe(id);
+ _pubspecs[id] = pubspec;
+ return pubspec;
}
/// Returns the previously cached pubspec for the package identified by [id]
@@ -210,7 +209,7 @@ class PubspecCache {
/// versions (i.e. ones without a prerelease suffix) before pre-release
/// versions. This ensures that the solver prefers stable packages over
/// unstable ones.
- Future<List<PackageId>> getVersions(PackageRef package) {
+ Future<List<PackageId>> getVersions(PackageRef package) async {
if (package.isRoot) {
throw new StateError("Cannot get versions for root package $package.");
}
@@ -219,43 +218,45 @@ class PubspecCache {
var versions = _versions[package];
if (versions != null) {
_versionCacheHits++;
- return new Future.value(versions);
+ return versions;
}
// See if we cached a failure.
var error = _versionErrors[package];
if (error != null) {
_versionCacheHits++;
- return new Future.error(error.first, error.last);
+ await new Future.error(error.first, error.last);
}
_versionCacheMisses++;
var source = _sources[package.source];
- return source.getVersions(package.name, package.description)
- .then((pubspecs) {
- // Sort by priority so we try preferred versions first.
- pubspecs.sort((pubspec1, pubspec2) {
- return _type == SolveType.DOWNGRADE
- ? Version.antiprioritize(pubspec1.version, pubspec2.version)
- : Version.prioritize(pubspec1.version, pubspec2.version);
- });
-
- var ids = pubspecs.reversed.map((pubspec) {
- var id = package.atVersion(pubspec.version);
- // Eagerly cache the pubspec now since we have it.
- _pubspecs[id] = pubspec;
- return id;
- }).toList();
- _versions[package] = ids;
- return ids;
- }).catchError((error, trace) {
+ var pubspecs;
+ try {
+ pubspecs = await source.getVersions(package.name, package.description);
+ } catch (error, stackTrace) {
// If an error occurs, cache that too. We only want to do one request
// for any given package, successful or not.
- log.solver("Could not get versions for $package:\n$error\n\n$trace");
- _versionErrors[package] = new Pair(error, new Chain.forTrace(trace));
+ log.solver("Could not get versions for $package:\n$error\n\n$stackTrace");
+ _versionErrors[package] = new Pair(error, new Chain.forTrace(stackTrace));
throw error;
+ }
+
+ // Sort by priority so we try preferred versions first.
+ pubspecs.sort((pubspec1, pubspec2) {
+ return _type == SolveType.DOWNGRADE
+ ? Version.antiprioritize(pubspec1.version, pubspec2.version)
+ : Version.prioritize(pubspec1.version, pubspec2.version);
});
+
+ var ids = pubspecs.reversed.map((pubspec) {
+ var id = package.atVersion(pubspec.version);
+ // Eagerly cache the pubspec now since we have it.
+ _pubspecs[id] = pubspec;
+ return id;
+ }).toList();
+ _versions[package] = ids;
+ return ids;
}
/// Returns the previously cached list of versions for the package identified
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/solver/version_queue.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698