Chromium Code Reviews| Index: lib/src/solver/version_solver.dart |
| diff --git a/lib/src/solver/version_solver.dart b/lib/src/solver/version_solver.dart |
| index 9852597a454c89735f357ce35cae1e77f270810a..52f47ef57336289e6c13778c1823ca84a0b137ef 100644 |
| --- a/lib/src/solver/version_solver.dart |
| +++ b/lib/src/solver/version_solver.dart |
| @@ -133,27 +133,16 @@ class SolveResult { |
| } |
| } |
| -/// Maintains a cache of previously-requested data: pubspecs and version lists. |
| -/// |
| -/// Used to avoid requesting the same pubspec from the server repeatedly. |
| -class PubspecCache { |
| +/// Maintains a cache of previously-requested version lists. |
| +class SolverCache { |
|
Bob Nystrom
2015/11/19 23:43:55
Maybe "VersionsCache" or "VersionCache"?
|
| final SourceRegistry _sources; |
| - /// The already-requested cached pubspec lists. |
| + /// The already-requested cached version lists. |
| final _versions = new Map<PackageRef, List<PackageId>>(); |
| /// The errors from failed version list requests. |
| final _versionErrors = new Map<PackageRef, Pair<Object, Chain>>(); |
| - /// The already-requested cached pubspecs. |
| - final _pubspecs = new Map<PackageId, Pubspec>(); |
| - |
| - // TODO(nweiz): Currently, if [getCachedPubspec] returns pubspecs cached via |
| - // [getVersions], the "complex backtrack" test case in version_solver_test |
| - // fails. Fix that. See also [BacktrackingSolver._getTransitiveDependers]. |
| - /// The set of package ids for which [getPubspec] has been explicitly called. |
| - final _explicitlyCached = new Set<PackageId>(); |
| - |
| /// The type of version resolution that was run. |
| final SolveType _type; |
| @@ -165,43 +154,7 @@ class PubspecCache { |
| /// was returned. |
| int _versionCacheHits = 0; |
| - /// The number of times a pubspec was requested and it wasn't cached and had |
| - /// to be requested from the source. |
| - int _pubspecCacheMisses = 0; |
| - |
| - /// The number of times a pubspec was requested and the cached version was |
| - /// returned. |
| - int _pubspecCacheHits = 0; |
| - |
| - PubspecCache(this._type, this._sources); |
| - |
| - /// Caches [pubspec] as the [Pubspec] for the package identified by [id]. |
| - void cache(PackageId id, Pubspec pubspec) { |
| - _pubspecs[id] = pubspec; |
| - } |
| - |
| - /// Loads the pubspec for the package identified by [id]. |
| - Future<Pubspec> getPubspec(PackageId id) async { |
| - _explicitlyCached.add(id); |
| - |
| - // Complete immediately if it's already cached. |
| - if (_pubspecs.containsKey(id)) { |
| - _pubspecCacheHits++; |
| - return _pubspecs[id]; |
| - } |
| - |
| - _pubspecCacheMisses++; |
| - |
| - var source = _sources[id.source]; |
| - var pubspec = await source.describe(id); |
| - _pubspecs[id] = pubspec; |
| - return pubspec; |
| - } |
| - |
| - /// Returns the previously cached pubspec for the package identified by [id] |
| - /// or returns `null` if not in the cache. |
| - Pubspec getCachedPubspec(PackageId id) => |
| - _explicitlyCached.contains(id) ? _pubspecs[id] : null; |
| + SolverCache(this._type, this._sources); |
| /// Gets the list of versions for [package]. |
| /// |
| @@ -233,9 +186,9 @@ class PubspecCache { |
| _versionCacheMisses++; |
| var source = _sources[package.source]; |
| - var pubspecs; |
| + var ids; |
| try { |
| - pubspecs = await source.getVersions(package.name, package.description); |
| + ids = await source.getVersions(package); |
| } catch (error, stackTrace) { |
| // If an error occurs, cache that too. We only want to do one request |
| // for any given package, successful or not. |
| @@ -247,18 +200,13 @@ class PubspecCache { |
| } |
| // Sort by priority so we try preferred versions first. |
| - pubspecs.sort((pubspec1, pubspec2) { |
| + ids.sort((id1, id2) { |
| return _type == SolveType.DOWNGRADE |
| - ? Version.antiprioritize(pubspec1.version, pubspec2.version) |
| - : Version.prioritize(pubspec1.version, pubspec2.version); |
| + ? Version.antiprioritize(id1.version, id2.version) |
| + : Version.prioritize(id1.version, id2.version); |
|
Bob Nystrom
2015/11/19 23:43:55
Swap the arguments here and get rid of the .revers
nweiz
2015/11/24 01:32:53
Done.
|
| }); |
| - var ids = pubspecs.reversed.map((pubspec) { |
| - var id = package.atVersion(pubspec.version); |
| - // Eagerly cache the pubspec now since we have it. |
| - _pubspecs[id] = pubspec; |
| - return id; |
| - }).toList(); |
| + ids = ids.reversed.toList(); |
| _versions[package] = ids; |
| return ids; |
| } |
| @@ -271,8 +219,6 @@ class PubspecCache { |
| String describeResults() { |
| var results = '''- Requested $_versionCacheMisses version lists |
| - Looked up $_versionCacheHits cached version lists |
| -- Requested $_pubspecCacheMisses pubspecs |
| -- Looked up $_pubspecCacheHits cached pubspecs |
| '''; |
| // Uncomment this to dump the visited package graph to JSON. |