Index: lib/src/solver/backtracking_solver.dart |
diff --git a/lib/src/solver/backtracking_solver.dart b/lib/src/solver/backtracking_solver.dart |
index da0dbec45e753b96f45bd675c69a78a2d08f46df..3df59151f9cdda48ab3e689f63218d461de82bb6 100644 |
--- a/lib/src/solver/backtracking_solver.dart |
+++ b/lib/src/solver/backtracking_solver.dart |
@@ -66,7 +66,8 @@ class BacktrackingSolver { |
/// The lockfile that was present before solving. |
final LockFile lockFile; |
- final PubspecCache cache; |
+ /// A cache of data requested during solving. |
+ final SolverCache cache; |
/// The set of packages that are being explicitly upgraded. |
/// |
@@ -117,11 +118,21 @@ class BacktrackingSolver { |
/// The number of solutions the solver has tried so far. |
var _attemptedSolutions = 1; |
+ /// A pubspec for pub's implicit dependencies on barback and related packages. |
+ final Pubspec _implicitPubspec = (() { |
Bob Nystrom
2015/11/19 23:43:55
Nit, I don't think the parens around the entire fn
nweiz
2015/11/24 01:32:53
Done.
|
+ var dependencies = []; |
+ barback.pubConstraints.forEach((name, constraint) { |
+ dependencies.add(new PackageDep(name, "hosted", constraint, name)); |
+ }); |
+ |
+ return new Pubspec("pub itself", dependencies: dependencies); |
+ })(); |
+ |
BacktrackingSolver(SolveType type, SourceRegistry sources, this.root, |
this.lockFile, List<String> useLatest) |
: type = type, |
sources = sources, |
- cache = new PubspecCache(type, sources) { |
+ cache = new SolverCache(type, sources) { |
_selection = new VersionSelection(this); |
for (var package in useLatest) { |
@@ -151,8 +162,6 @@ class BacktrackingSolver { |
// Pre-cache the root package's known pubspec. |
var rootID = new PackageId.root(root); |
- cache.cache(rootID, root.pubspec); |
- cache.cache(new PackageId.magic('pub itself'), _implicitPubspec()); |
await _selection.select(rootID); |
_validateSdkConstraint(root.pubspec); |
@@ -160,9 +169,10 @@ class BacktrackingSolver { |
logSolve(); |
var packages = await _solve(); |
- var pubspecs = new Map.fromIterable(packages, |
- key: (id) => id.name, |
- value: (id) => cache.getCachedPubspec(id)); |
+ var pubspecs = {}; |
+ for (var id in packages) { |
+ pubspecs[id.name] = await _getPubspec(id); |
+ } |
var resolved = await Future.wait( |
packages.map((id) => sources[id.source].resolveId(id))); |
@@ -183,17 +193,6 @@ class BacktrackingSolver { |
} |
} |
- /// Creates a pubspec for pub's implicit dependencies on barback and related |
- /// packages. |
- Pubspec _implicitPubspec() { |
- var dependencies = []; |
- barback.pubConstraints.forEach((name, constraint) { |
- dependencies.add(new PackageDep(name, "hosted", constraint, name)); |
- }); |
- |
- return new Pubspec("pub itself", dependencies: dependencies); |
- } |
- |
/// Generates a map containing all of the known available versions for each |
/// package in [packages]. |
/// |
@@ -476,7 +475,7 @@ class BacktrackingSolver { |
var pubspec; |
try { |
- pubspec = await cache.getPubspec(id); |
+ pubspec = await _getPubspec(id); |
} on PackageNotFoundException { |
// We can only get here if the lockfile refers to a specific package |
// version that doesn't exist (probably because it was yanked). |
@@ -569,7 +568,7 @@ class BacktrackingSolver { |
/// |
/// This takes overrides and dev dependencies into account when neccessary. |
Future<Set<PackageDep>> depsFor(PackageId id) async { |
- var pubspec = await cache.getPubspec(id); |
+ var pubspec = await _getPubspec(id); |
var deps = pubspec.dependencies.toSet(); |
if (id.isRoot) { |
// Include dev dependencies of the root package. |
@@ -606,6 +605,15 @@ class BacktrackingSolver { |
return deps; |
} |
+ /// Loads and returns the pubspec for [id]. |
+ Future<Pubspec> _getPubspec(PackageId id) async { |
+ if (id.isRoot) return root.pubspec; |
+ if (id.isMagic && id.name == 'pub itself') return _implicitPubspec; |
+ |
+ var source = sources[id.source]; |
+ return await source.describe(id); |
+ } |
+ |
/// Logs the initial parameters to the solver. |
void _logParameters() { |
var buffer = new StringBuffer(); |