Index: sdk/lib/_internal/pub_generated/lib/src/solver/backtracking_solver.dart |
diff --git a/sdk/lib/_internal/pub_generated/lib/src/solver/backtracking_solver.dart b/sdk/lib/_internal/pub_generated/lib/src/solver/backtracking_solver.dart |
index 26341e474c8801ff5cc4b997396c9d02ccccbb17..a5bac0f8ef66d369a5b2da8cee7d8dad908acbc5 100644 |
--- a/sdk/lib/_internal/pub_generated/lib/src/solver/backtracking_solver.dart |
+++ b/sdk/lib/_internal/pub_generated/lib/src/solver/backtracking_solver.dart |
@@ -127,94 +127,59 @@ class BacktrackingSolver { |
/// Completes with a list of specific package versions if successful or an |
/// error if it failed to find a solution. |
Future<SolveResult> solve() { |
- final completer0 = new Completer(); |
- scheduleMicrotask(() { |
- try { |
- var stopwatch = new Stopwatch(); |
- _logParameters(); |
- var overrides = _overrides.values.toList(); |
- overrides.sort(((a, b) { |
- return a.name.compareTo(b.name); |
- })); |
- join0() { |
- completer0.complete(); |
- } |
- finally0(cont0) { |
- try { |
- var buffer = new StringBuffer(); |
- buffer.writeln('${runtimeType} took ${stopwatch.elapsed} seconds.'); |
- buffer.writeln(cache.describeResults()); |
- log.solver(buffer); |
- cont0(); |
- } catch (e0, s0) { |
- completer0.completeError(e0, s0); |
- } |
- } |
- catch0(error, s1) { |
- try { |
- if (error is SolveFailure) { |
- final v0 = new SolveResult.failure( |
- sources, |
- root, |
- lockFile, |
- overrides, |
- error, |
- attemptedSolutions); |
- finally0(() { |
- completer0.complete(v0); |
- }); |
- } else { |
- throw error; |
- } |
- } catch (error, s1) { |
- finally0(() => completer0.completeError(error, s1)); |
- } |
- } |
- try { |
- stopwatch.start(); |
- cache.cache(new PackageId.root(root), root.pubspec); |
- _validateSdkConstraint(root.pubspec); |
- new Future.value(_traverseSolution()).then((x0) { |
- try { |
- var packages = x0; |
- var pubspecs = new Map.fromIterable(packages, key: ((id) { |
- return id.name; |
- }), value: ((id) { |
- return cache.getCachedPubspec(id); |
- })); |
- new Future.value(Future.wait(packages.map(((id) { |
- return sources[id.source].resolveId(id); |
- })))).then((x1) { |
- try { |
- packages = x1; |
- final v1 = new SolveResult.success( |
- sources, |
- root, |
- lockFile, |
- packages, |
- overrides, |
- pubspecs, |
- _getAvailableVersions(packages), |
- attemptedSolutions); |
- finally0(() { |
- completer0.complete(v1); |
- }); |
- } catch (e1, s2) { |
- catch0(e1, s2); |
- } |
- }, onError: catch0); |
- } catch (e2, s3) { |
- catch0(e2, s3); |
- } |
- }, onError: catch0); |
- } catch (e3, s4) { |
- catch0(e3, s4); |
- } |
- } catch (e, s) { |
- completer0.completeError(e, s); |
- } |
+ var stopwatch = new Stopwatch(); |
+ |
+ _logParameters(); |
+ |
+ // Sort the overrides by package name to make sure they're deterministic. |
+ var overrides = _overrides.values.toList(); |
+ overrides.sort((a, b) => a.name.compareTo(b.name)); |
+ |
+ // TODO(nweiz): Use async/await here once |
+ // https://github.com/dart-lang/async_await/issues/79 is fixed. |
+ return new Future.sync(() { |
+ stopwatch.start(); |
+ |
+ // Pre-cache the root package's known pubspec. |
+ cache.cache(new PackageId.root(root), root.pubspec); |
+ |
+ _validateSdkConstraint(root.pubspec); |
+ return _traverseSolution(); |
+ }).then((packages) { |
+ var pubspecs = new Map.fromIterable( |
+ packages, |
+ key: (id) => id.name, |
+ value: (id) => cache.getCachedPubspec(id)); |
+ |
+ return Future.wait( |
+ packages.map((id) => sources[id.source].resolveId(id))).then((packages) { |
+ return new SolveResult.success( |
+ sources, |
+ root, |
+ lockFile, |
+ packages, |
+ overrides, |
+ pubspecs, |
+ _getAvailableVersions(packages), |
+ attemptedSolutions); |
+ }); |
+ }).catchError((error) { |
+ if (error is! SolveFailure) throw error; |
+ // Wrap a failure in a result so we can attach some other data. |
+ return new SolveResult.failure( |
+ sources, |
+ root, |
+ lockFile, |
+ overrides, |
+ error, |
+ attemptedSolutions); |
+ }).whenComplete(() { |
+ // Gather some solving metrics. |
+ var buffer = new StringBuffer(); |
+ buffer.writeln('${runtimeType} took ${stopwatch.elapsed} seconds.'); |
+ buffer.writeln(cache.describeResults()); |
+ log.solver(buffer); |
}); |
- return completer0.future; |
} |
/// Generates a map containing all of the known available versions for each |