| 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 54c5ab466e15115b8ff41bf67a3ba6fce216eabf..8d78871cfa22f07df96f34cf53de7727ad2472e1 100644
|
| --- a/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
|
| +++ b/sdk/lib/_internal/pub/lib/src/solver/version_solver.dart
|
| @@ -15,6 +15,7 @@ import '../source_registry.dart';
|
| import '../version.dart';
|
| import '../utils.dart';
|
| import 'backtracking_solver.dart';
|
| +import 'solve_report.dart' as solve_report;
|
|
|
| /// Attempts to select the best concrete versions for all of the transitive
|
| /// dependencies of [root] taking into account all of the [VersionConstraint]s
|
| @@ -24,13 +25,16 @@ import 'backtracking_solver.dart';
|
| /// If [useLatest] is given, then only the latest versions of the referenced
|
| /// packages will be used. This is for forcing an upgrade to one or more
|
| /// packages.
|
| +///
|
| +/// If [upgradeAll] is true, the contents of [lockFile] are ignored.
|
| Future<SolveResult> resolveVersions(SourceRegistry sources, Package root,
|
| - {LockFile lockFile, List<String> useLatest}) {
|
| + {LockFile lockFile, List<String> useLatest, bool upgradeAll: false}) {
|
| if (lockFile == null) lockFile = new LockFile.empty();
|
| if (useLatest == null) useLatest = [];
|
|
|
| return log.progress('Resolving dependencies', () {
|
| - return new BacktrackingSolver(sources, root, lockFile, useLatest).solve();
|
| + return new BacktrackingSolver(sources, root, lockFile, useLatest,
|
| + upgradeAll: upgradeAll).solve();
|
| });
|
| }
|
|
|
| @@ -46,6 +50,13 @@ class SolveResult {
|
| /// The dependency overrides that were used in the solution.
|
| final List<PackageDep> overrides;
|
|
|
| + /// The available versions of all selected packages from their source.
|
| + ///
|
| + /// Will be empty if the solve failed. An entry here may not include the full
|
| + /// list of versions available if the given package was locked and did not
|
| + /// need to be unlocked during the solve.
|
| + final Map<String, List<Version>> availableVersions;
|
| +
|
| /// The error that prevented the solver from finding a solution or `null` if
|
| /// it was successful.
|
| final SolveFailure error;
|
| @@ -56,8 +67,30 @@ class SolveResult {
|
| /// solution.
|
| final int attemptedSolutions;
|
|
|
| - SolveResult(this.packages, this.overrides, this.error,
|
| - this.attemptedSolutions);
|
| + final SourceRegistry _sources;
|
| + final Package _root;
|
| + final LockFile _previousLockFile;
|
| +
|
| + SolveResult.success(this._sources, this._root, this._previousLockFile,
|
| + this.packages, this.overrides, this.availableVersions,
|
| + this.attemptedSolutions)
|
| + : error = null;
|
| +
|
| + SolveResult.failure(this._sources, this._root, this._previousLockFile,
|
| + this.overrides, this.error, this.attemptedSolutions)
|
| + : this.packages = null,
|
| + this.availableVersions = {};
|
| +
|
| + /// Displays a report of what changes were made to the lockfile.
|
| + ///
|
| + /// If [showAll] is true, displays all new and previous dependencies.
|
| + /// Otherwise, just shows a warning for any overrides in effect.
|
| + ///
|
| + /// Returns the number of changed (added, removed, or modified) dependencies.
|
| + int showReport({bool showAll: false}) {
|
| + return solve_report.show(_sources, _root, _previousLockFile, this,
|
| + showAll: showAll);
|
| + }
|
|
|
| String toString() {
|
| if (!succeeded) {
|
| @@ -163,6 +196,10 @@ class PubspecCache {
|
| return ids;
|
| });
|
| }
|
| +
|
| + /// Returns the previously cached list of versions for the package identified
|
| + /// by [package] or returns `null` if not in the cache.
|
| + List<PackageId> getCachedVersions(PackageRef package) => _versions[package];
|
| }
|
|
|
| /// A reference from a depending package to a package that it depends on.
|
|
|