| Index: utils/pub/version_solver.dart
|
| diff --git a/utils/pub/version_solver.dart b/utils/pub/version_solver.dart
|
| index a4b70f89a0c4c208d1d5cc888ca3814cc4b2899b..f277169ffcf9fa61b9377ad467a7476d6193c9bd 100644
|
| --- a/utils/pub/version_solver.dart
|
| +++ b/utils/pub/version_solver.dart
|
| @@ -35,7 +35,8 @@
|
| /// the beginning again.
|
| library version_solver;
|
|
|
| -import 'dart:json';
|
| +import 'dart:async';
|
| +import 'dart:json' as json;
|
| import 'dart:math';
|
| import 'lock_file.dart';
|
| import 'log.dart' as log;
|
| @@ -116,7 +117,7 @@ class VersionSolver {
|
| // If we have an async operation to perform, chain the loop to resume
|
| // when it's done. Otherwise, just loop synchronously.
|
| if (future != null) {
|
| - return future.chain(processNextWorkItem);
|
| + return future.then(processNextWorkItem);
|
| }
|
| }
|
| }
|
| @@ -143,7 +144,7 @@ class VersionSolver {
|
| /// Returns the most recent version of [dependency] that satisfies all of its
|
| /// version constraints.
|
| Future<Version> getBestVersion(Dependency dependency) {
|
| - return dependency.getVersions().transform((versions) {
|
| + return dependency.getVersions().then((versions) {
|
| var best = null;
|
| for (var version in versions) {
|
| if (dependency.useLatestVersion ||
|
| @@ -189,12 +190,12 @@ class VersionSolver {
|
| }
|
| }
|
|
|
| - return dependency.dependers.map(getDependency).some((subdependency) =>
|
| + return dependency.dependers.mappedBy(getDependency).any((subdependency) =>
|
| tryUnlockDepender(subdependency, seen));
|
| }
|
|
|
| List<PackageId> buildResults() {
|
| - return _packages.values.filter((dep) => dep.isDependedOn).map((dep) {
|
| + return _packages.values.where((dep) => dep.isDependedOn).mappedBy((dep) {
|
| var description = dep.description;
|
|
|
| // If the lockfile contains a fully-resolved description for the package,
|
| @@ -208,7 +209,8 @@ class VersionSolver {
|
| }
|
|
|
| return new PackageId(dep.name, dep.source, dep.version, description);
|
| - });
|
| + })
|
| + .toList();
|
| }
|
| }
|
|
|
| @@ -254,7 +256,7 @@ class ChangeVersion implements WorkItem {
|
| // them both and update any constraints that differ between the two.
|
| return Futures.wait([
|
| getDependencyRefs(solver, oldVersion),
|
| - getDependencyRefs(solver, version)]).transform((list) {
|
| + getDependencyRefs(solver, version)]).then((list) {
|
| var oldDependencyRefs = list[0];
|
| var newDependencyRefs = list[1];
|
|
|
| @@ -289,7 +291,7 @@ class ChangeVersion implements WorkItem {
|
| }
|
|
|
| var id = new PackageId(package, source, version, description);
|
| - return solver._pubspecs.load(id).transform((pubspec) {
|
| + return solver._pubspecs.load(id).then((pubspec) {
|
| var dependencies = <String, PackageRef>{};
|
| for (var dependency in pubspec.dependencies) {
|
| dependencies[dependency.name] = dependency;
|
| @@ -364,7 +366,7 @@ abstract class ChangeConstraint implements WorkItem {
|
|
|
| // The constraint has changed, so see what the best version of the package
|
| // that meets the new constraint is.
|
| - return solver.getBestVersion(newDependency).transform((best) {
|
| + return solver.getBestVersion(newDependency).then((best) {
|
| if (best == null) {
|
| undo(solver);
|
| } else if (newDependency.version != best) {
|
| @@ -438,7 +440,7 @@ class UnlockPackage implements WorkItem {
|
| log.fine("Unlocking ${package.name}.");
|
|
|
| solver.lockFile.packages.remove(package.name);
|
| - return solver.getBestVersion(package).transform((best) {
|
| + return solver.getBestVersion(package).then((best) {
|
| if (best == null) return null;
|
| solver.enqueue(new ChangeVersion(
|
| package.name, package.source, package.description, best));
|
| @@ -470,7 +472,7 @@ class PubspecCache {
|
| return new Future<Pubspec>.immediate(_pubspecs[id]);
|
| }
|
|
|
| - return id.describe().transform((pubspec) {
|
| + return id.describe().then((pubspec) {
|
| // Cache it.
|
| _pubspecs[id] = pubspec;
|
| return pubspec;
|
| @@ -500,7 +502,7 @@ class Dependency {
|
| bool get isDependedOn => !_refs.isEmpty;
|
|
|
| /// The names of all the packages that depend on this dependency.
|
| - Collection<String> get dependers => _refs.keys;
|
| + Iterable<String> get dependers => _refs.keys;
|
|
|
| /// Gets the overall constraint that all packages are placing on this one.
|
| /// If no packages have a constraint on this one (which can happen when this
|
| @@ -508,7 +510,7 @@ class Dependency {
|
| VersionConstraint get constraint {
|
| if (_refs.isEmpty) return null;
|
| return new VersionConstraint.intersection(
|
| - _refs.values.map((ref) => ref.constraint));
|
| + _refs.values.mappedBy((ref) => ref.constraint));
|
| }
|
|
|
| /// The source of this dependency's package.
|
| @@ -535,7 +537,7 @@ class Dependency {
|
| for (var ref in refs) {
|
| if (ref is RootSource) return ref;
|
| }
|
| - return refs[0];
|
| + return refs.first;
|
| }
|
|
|
| Dependency(this.name)
|
| @@ -576,7 +578,7 @@ class Dependency {
|
| String _requiredDepender() {
|
| if (_refs.isEmpty) return null;
|
|
|
| - var dependers = _refs.keys;
|
| + var dependers = _refs.keys.toList();
|
| if (dependers.length == 1) {
|
| var depender = dependers[0];
|
| if (_refs[depender].source is RootSource) return null;
|
| @@ -700,8 +702,8 @@ class DescriptionMismatchException implements Exception {
|
| // TODO(nweiz): Dump descriptions to YAML when that's supported.
|
| return "Incompatible dependencies on '$package':\n"
|
| "- '$depender1' depends on it with description "
|
| - "${JSON.stringify(description1)}\n"
|
| + "${json.stringify(description1)}\n"
|
| "- '$depender2' depends on it with description "
|
| - "${JSON.stringify(description2)}";
|
| + "${json.stringify(description2)}";
|
| }
|
| }
|
|
|