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

Unified Diff: lib/src/solver/version_solver.dart

Issue 1459733002: Move pubspec caching into each source. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Code review changes Created 5 years, 1 month 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 | « lib/src/solver/backtracking_solver.dart ('k') | lib/src/source.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..b70c226120ba60f80fdda9a724623771e8e87c89 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 {
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,15 @@ class PubspecCache {
}
// Sort by priority so we try preferred versions first.
- pubspecs.sort((pubspec1, pubspec2) {
+ ids.sort((id1, id2) {
+ // Reverse the IDs because we want the newest version at the front of the
+ // list.
return _type == SolveType.DOWNGRADE
- ? Version.antiprioritize(pubspec1.version, pubspec2.version)
- : Version.prioritize(pubspec1.version, pubspec2.version);
+ ? Version.antiprioritize(id2.version, id1.version)
+ : Version.prioritize(id2.version, id1.version);
});
- 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.toList();
_versions[package] = ids;
return ids;
}
@@ -271,8 +221,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.
« no previous file with comments | « lib/src/solver/backtracking_solver.dart ('k') | lib/src/source.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698