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

Unified Diff: utils/pub/solver/version_solver.dart

Issue 14232023: Switch to backtracking solver. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 8 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 | « utils/pub/solver/greedy_solver.dart ('k') | utils/tests/pub/sdk_constraint_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/pub/solver/version_solver.dart
diff --git a/utils/pub/solver/version_solver.dart b/utils/pub/solver/version_solver.dart
index cf60e22c53decc9b5c965fc86d0693e629e10099..3854c7500b3346ce99b0bfffd1b90a5aba6c69e0 100644
--- a/utils/pub/solver/version_solver.dart
+++ b/utils/pub/solver/version_solver.dart
@@ -15,7 +15,6 @@ import '../source.dart';
import '../source_registry.dart';
import '../version.dart';
import 'backtracking_solver.dart';
-import 'greedy_solver.dart';
/// Attempts to select the best concrete versions for all of the transitive
/// dependencies of [root] taking into account all of the [VersionConstraint]s
@@ -25,87 +24,14 @@ import 'greedy_solver.dart';
/// If [useLatest] is given, then only the latest versions of the referenced
/// packages will be used. This is for forcing an update to one or more
/// packages.
-///
-/// If [allowBacktracking] is `true` the backtracking version solver will
-/// be used. Otherwise, the non-backtracking one will be.
Future<SolveResult> resolveVersions(SourceRegistry sources, Package root,
- {LockFile lockFile, bool allowBacktracking, List<PackageRef> useLatest}) {
+ {LockFile lockFile, List<PackageRef> useLatest}) {
log.message('Resolving dependencies...');
- if (allowBacktracking == null) allowBacktracking = false;
if (lockFile == null) lockFile = new LockFile.empty();
if (useLatest == null) useLatest = [];
- var solver;
- if (allowBacktracking) {
- solver = new BacktrackingVersionSolver(sources, root, lockFile, useLatest);
- } else {
- solver = new GreedyVersionSolver(sources, root, lockFile, useLatest);
- }
-
- return solver.solve();
-}
-
-/// Base class for an implementation of the version constraint solver.
-class VersionSolver {
- final SourceRegistry sources;
- final Package root;
- final LockFile lockFile;
- final PubspecCache cache;
-
- VersionSolver(SourceRegistry sources, this.root, this.lockFile,
- List<String> useLatest)
- : sources = sources,
- cache = new PubspecCache(sources) {
- for (var package in useLatest) {
- forceLatestVersion(package);
- lockFile.packages.remove(package);
- }
- }
-
- /// The number of solutions the solver has tried so far.
- int get attemptedSolutions;
-
- /// Force the solver to upgrade [package] to the latest available version.
- void forceLatestVersion(String package);
-
- /// Run the solver. Completes with a list of specific package versions if
- /// successful or an error if it failed to find a solution.
- Future<SolveResult> solve() {
- var stopwatch = new Stopwatch();
-
- return new Future(() {
- stopwatch.start();
-
- // Pre-cache the root package's known pubspec.
- cache.cache(new PackageId.root(root), root.pubspec);
- return runSolver();
- }).then((packages) {
- return new SolveResult(packages, null, 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(null, error, attemptedSolutions);
- }).whenComplete(() {
- // Gather some solving metrics.
- var buffer = new StringBuffer();
- buffer.writeln('${runtimeType} took ${stopwatch.elapsed} seconds.');
- buffer.writeln(
- '- Requested ${cache.versionCacheMisses} version lists');
- buffer.writeln(
- '- Looked up ${cache.versionCacheHits} cached version lists');
- buffer.writeln(
- '- Requested ${cache.pubspecCacheMisses} pubspecs');
- buffer.writeln(
- '- Looked up ${cache.pubspecCacheHits} cached pubspecs');
- log.solver(buffer);
- });
- }
-
- /// Entrypoint for subclasses to actually begin solving. External code should
- /// call [solve()].
- Future<List<PackageId>> runSolver();
+ return new BacktrackingSolver(sources, root, lockFile, useLatest).solve();
}
/// The result of a version resolution.
« no previous file with comments | « utils/pub/solver/greedy_solver.dart ('k') | utils/tests/pub/sdk_constraint_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698